Re: [問題] 問一個基本的指標觀念問題

看板C_and_CPP (C/C++)作者 (黑金屬魂)時間16年前 (2009/11/26 11:49), 編輯推噓1(102)
留言3則, 2人參與, 最新討論串1/2 (看更多)
※ 引述《samuelcdf (溫泉龜)》之銘言: : ※ 引述《kennychen67 (執著的勇士)》之銘言: : : 請高手幫我解答疑惑一下 : : #include"stdio.h" : : main() : : { : : int i,x[5]; : : int *p=x; : : for(i=0;i<5;i++) : : x[i]=10*i; : : 到這裡不是x[5]={0,10,20,30,40} : : printf("%d %d %d\n,++*p,*++p,*p++") : : 後面這裡就看不太懂了我用dev c++跑出來的答案是21,20,0 : 如果沒記錯的話, 傳到函式中的參數再傳遞的過程是被放到堆疊中, 也就是說 : 最後的順序會變成這樣: : *p++ : *++p : ++*p : 字串"%d %d %d\n"的啟始記憶體位置 : 所以, : [p 等於 &x[0]], *p++ : 先把 *p(值為0)傳出去, 然後 p 變成 &x[1] (顯然compiler把*p++解釋 : 為 *(p++) ) : [p 等於 &x[1]], *++p : p 先變成 &x[2], 然後把*p傳出去(也就是20) : [p 等於 &x[2]], ++*p : *p 先變成21, 然後把*p傳出去 (21) 傳到函式中的參數再傳遞的過程是被放到堆疊中 這句話的意思是說 printf("%d %d %d\n,++*p,*++p,*p++") 在堆疊裡是|*p++|最後進去,先處理 |----| |*++p| |----| |++*p|先進去,最後處理 |----| 這樣的情形嗎,所以處理順序是*p++,*++p,++*p ? 最近在加強指標的觀念 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.228.136.212

11/26 12:35, , 1F
這麼舊的文章你也回...
11/26 12:35, 1F

11/26 13:56, , 2F
勇於發問,才能解決問題
11/26 13:56, 2F

11/26 14:01, , 3F
嗯,佩服
11/26 14:01, 3F
文章代碼(AID): #1B3VhIXI (C_and_CPP)
文章代碼(AID): #1B3VhIXI (C_and_CPP)