作者LPH66 (-858993460)
看板C_and_CPP
標題Re: [問題] 指標常數的問題
時間Sun Sep 5 19:45:22 2010
※ 引述《guanrulee (Cobra)》之銘言:
: 最近在看C語言教學手冊
: 他說如果宣告一個 int a[3] = {0, 1, 2};
: 假設 a[0] 位址是 1400 這個位址存放的值是 0
: a[1] 位址是 1404 這個位址存放的值是 1
: a[2] 位址是 1408 這個位址存放的值是 2
: 但他又說 a 是一個指標常數 位址是1400 裡面存放的值也是 1400
: 我知道為什麼他值是1400
: 但我不了解的是
: 同樣的1400位址 怎麼可以又存 0這個int數值 又存 位址1400 呢?
: 也就是為什麼他同時可以當指標 又當 int呢?
: 內部運作是如何解釋這個狀況呢 謝謝~
書上這話其實有點誤導
位址 1400 的這地方存的的確是 0 這個值
而 1400 這值只不過是綁在 a 這個符號上而已
也就是說 當 a 這個符號解釋做指標常數時
它就會代 1400 這個指標進去
(注意是代入 也就是這事情是 compiler 幫你做的
實際執行時 1400 這值會直接出現在指令上 而不是在資料區)
當 a 拿來存取陣列時 1400 這個值就會代入位址運算當中
所以 a[2] 的位址才會是 1400+4*2=1408
是這個樣子的
--
有人喜歡邊
玩遊戲邊
上逼;
也有人喜歡邊
聽歌邊
打字。
但是,我有個請求,
選字的時候請
專心好嗎?
-- 改編自「古 火田 任三郎」之開場白
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.30.138
推 Bencrie:推這篇 =w= 09/05 20:09
推 james732: 這篇讚 09/05 20:16
推 guanrulee:謝謝你 這樣我就清楚了^^ 09/05 20:56
推 hilorrk:推~ 09/06 01:27