→ PoorLoser: 記得最近才有人問, &a 跟 a 是同一個記憶體 "位址" 11/26 01:43
→ PoorLoser: 不然會陷入 位址的位址的位址的位址的... ... 11/26 01:44
→ PoorLoser: a[i] 取值 等效於 *(a+i) 11/26 01:45
→ PoorLoser: 下面那個網頁說得是二維陣列, 你好像搞錯什麼了... 11/26 01:48
→ putumaxally: 陣列可以用指標的方法來操作,不代表陣列等於指標 11/26 05:06
→ putumaxally: 你給的網站是二維陣列,你舉的a是一維陣列,然後你說 11/26 05:17
→ putumaxally: 他是指標變數,你應該是看太多東西搞混了 11/26 05:18
→ putumaxally: 一維陣列的位址跟第一個值的位址是一樣的,[]裡面的 11/26 05:21
→ putumaxally: 數字代表位移量。 11/26 05:23
→ putumaxally: 二維陣列就是在一維陣列裡面在放一個一維陣列,所以 11/26 05:24
→ putumaxally: 痾,上面這句我好像說錯了... 11/26 05:28
推 purpose: 你仔細看旗標那的第一行,有一個作者刻意設定出來的名詞 11/26 07:32
→ purpose: >> 陣列的名稱是一個指向陣列位址的『指標常數』 11/26 07:32
→ purpose: >> 『指標常數』的位址等於『指標常數』的內容 11/26 07:33
謝謝樓上三位p大的熱心回應。我似乎快要搞懂了 :)
尤其是這句話: 『指標常數』的位址等於『指標常數』的內容
當我在做int a[5] = {11,22,33,44,55}; printf("a = %d",a);
印出來的a是"address 2686752",而不是位址2686752放著"數值 2686752"
確實,旗標網頁講的是2D array的例子,但是這個問題是可以被簡化為1D來討論的。
它無關1D與2D,它比較關係到array他在記憶體怎麼實作的問題。
再換個方式來問好了:
我們把層級拉低到記憶體來看
對於我所提出的例子,在記憶體區段2686752至2686755之中,它到底放了什麼數值?
我想了解記憶體真正紀錄的數值,謝謝大家(鞠躬)。
(我自己傾向是"11")
ps.
這篇文章中是什麼東西讓我一直鬼打牆呢?
我想可以以下圖和大家說明(圖節錄至網頁):
http://i.imgur.com/u2CBde1.jpg
(我不能接受記憶體區間1000的地方同時紀錄著『1000』與『12』這兩個數值!!!)
※ 編輯: i78524 (111.255.146.215), 11/26/2014 13:05:34
推 LPH66: 他把 num / num[0] 畫一個格子讓你誤會了 11/26 13:51
→ LPH66: 實際上 1000 這值是綁在 num 這符號上的, 在做位移運算時 11/26 13:51
→ LPH66: (例如計算 num[1] 的位址等) 會把這個 1000 直接代入運算式 11/26 13:52
→ LPH66: 也就是說 1000 這個值不是記在記憶體裡而是直接代入運算 11/26 13:52
→ LPH66: 在編譯完的程式裡已經沒有"num"這個名字, 而是變成"位址在 11/26 13:55
→ LPH66: 1000 那裡的陣列",要說的話這才是1000這值"記錄在"的地方 11/26 13:56
→ dirkc: 你認為的11是對的,但是你要說的是2686755而非26867525吧 11/26 16:45
推 purpose: 編譯器自己會有一塊記憶體,裡面記載 num 是二維陣列 11/26 19:56
→ purpose: int [3][4] 起始位址是 1000,所以運算式中出現 num 時 11/26 19:56
→ purpose: 編譯器從他自己那塊記憶體去做查詢,查到 1000 這個值 11/26 19:57
→ purpose: 編譯器的那塊記憶體,在程式編譯完後就丟掉了,所以你寫 11/26 19:58
→ purpose: &num 下去編譯器也不會鳥你,會硬回傳 1000 這個值 11/26 19:58
推 purpose: 至於 num[1] 的等價運算式是 *(num + 1),根據指標運算 11/26 20:00
→ purpose: 的規則,就是要跳 sizeof(int) * 4,是從 num 推導得來。 11/26 20:01
感謝LPH66與purpose的耐心解釋,這一次我完全弄懂了。
在學習C的時候,我總是挺在意記憶體與編譯器到底怎麼運作的。
因此,我想看到的就是這個層級的解釋。
真的十分謝謝你們!
也十分謝謝dirkc,幫我抓出筆誤(已修正)。
最後感謝所有幫我解惑的網友,感恩!
※ 編輯: i78524 (111.255.146.215), 11/26/2014 22:30:57
推 purpose: 有興趣的話,可以看看置底文,還有爬文找我寫的混沌四神 11/26 22:50
→ purpose: 雖然我寫得不太通順,但可以提供一點額外資訊 11/26 22:50