看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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
twotwoone:這麼舊的文章你也回... 11/26 12:35
deh3215:勇於發問,才能解決問題 11/26 13:56
twotwoone:嗯,佩服 11/26 14:01