作者deh3215 (黑金屬魂)
看板C_and_CPP
標題Re: [問題] 問一個基本的指標觀念問題
時間Thu Nov 26 11:49:35 2009
※ 引述《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