Re: [考題] 100年普考程式設計概要

看板Examination作者 (火腿哥)時間9年前 (2017/03/16 20:42), 編輯推噓5(508)
留言13則, 6人參與, 最新討論串2/2 (看更多)
※ 引述《blueclock (小楊)》之銘言: : [考題] 國考歷屆考題與考題觀念討論(書裡看到的選這個)請附上想法、出處 : 請問下列 C 程式片段執行後,a 陣列的內容為何? : #define N 10 : int a[N]={1,2,3,4,5,6,7,8,9,10}; : int *p=&a[0], *q=&a[N-1], temp; : while(p < q) : { temp=*p; : *p++=*q; : *q--=temp; : } : 答案是{10,9,8,7,6,5,4,3,2,1} : 我的想法是 : p是儲存a[0]的位址 : q是儲存a[9]的位址 : 而a[0]的位址永遠比a[9]小 : 那while為何不會成為無窮迴圈? 您把指標的定義有點搞混了, 先說明,在宣告時,*p指「p」是指標, 但在運算時,*p代表取值,而&a代表取址, 所以宣告int *p=&a[0],是讓他們互為別名, 而程式中的p和q本來就是指標,所以p代表a[0]的內容,q代表a[9]的內容,自然比的就是內容值。 : 再來就是*p和*q的值分別指的是a[0]和a[9]的內容 : 為何做加減也會影響到陣列內其他元素的值? : 求解惑 您又誤會指標的加減了,*p++,代表的是*p所指的位址++,等同於a[0+1] 同理,*q--,等同於a[9-1] PS: 教學相長,希望認真的人都考上(包括我T.T) ----- Sent from JPTT on my Asus ASUS_X00DDA. -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.82.247.149 ※ 文章網址: https://www.ptt.cc/bbs/Examination/M.1489668128.A.10F.html

03/16 21:08, , 1F
比的不是內容是位址喔
03/16 21:08, 1F

03/16 21:10, , 2F
變數名稱是p,型態是int*,*p++應該是p去做++
03/16 21:10, 2F

03/16 21:21, , 3F
指標一定要搞懂不然就GG惹
03/16 21:21, 3F

03/16 21:30, , 4F
a大說的是,抱歉,弄錯了,所以*p++和*q--其實就是指標的
03/16 21:30, 4F

03/16 21:30, , 5F
加減法位移,也就是p和q都交換內容,並且往中間靠
03/16 21:30, 5F

03/16 21:46, , 6F
感謝各位大大的詳細解說 受益良多
03/16 21:46, 6F

03/17 02:22, , 7F
*p++,因為*與++的優先權相同,運算時要以右結合性運算,
03/17 02:22, 7F

03/17 02:22, , 8F
先算p++,
03/17 02:22, 8F

03/17 02:22, , 9F
但因為是後置加要等到這行運算式後才會計算,所以先計算*
03/17 02:22, 9F

03/17 02:22, , 10F
p=*q,執行完,再計算p++
03/17 02:22, 10F

03/17 23:09, , 11F
?
03/17 23:09, 11F

03/17 23:09, , 12F
讚a
03/17 23:09, 12F

04/02 22:47, , 13F
*p++=*q;會轉譯成 *p=*q; p=p+1
04/02 22:47, 13F
文章代碼(AID): #1OoeWW4F (Examination)
文章代碼(AID): #1OoeWW4F (Examination)