看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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