[問題] 陣列、指標與記憶體的概念疑問
一開始請大家看個code:
http://i.imgur.com/6RD8WK1.jpg?1
在這裡,陣列可以用指標的方法來操作。
由&a得知,指標變數a的"記憶體位址"為:2686752 (十進位)
由 a得知,指標變數a指向的是:2686752 (十進位)
換句話說2686752至26867525這段記憶體位置裡放的應該是數字:2686752
(我的觀念:指標變數是個值,這個值放的是指向的位址)
圖例:
┌這裡放4byte數字2686752┐
|_____|_____|_____|_____|
↑ ↑ ↑ ↑
6752 6753 6754 6755
取值運算子*a告訴我:
(1). a裡面放的數字是2686752
(2). 我去記憶體位址2686752的地方拿數字出來,拿出來的東西是11
(3). 因此,可推敲出"11"這個數值,確實是放在2686752至26867525這段記憶體區間
我的問題來了
但是2686752至26867525這段記憶體區間不是已經放了數字:2686752嗎?
我不太能接受數字11也是放在2686752至26867525這段記憶體區間內啊...
11到底放在記憶體的哪裡呢?
這是個新手問題,但我還是轉不過來,請見諒。
還請各位多多指教與幫忙,真的十分感謝各位。
我是突然看了http://www.flag.com.tw/book/cento-5105.asp?bokno=FS712&id=275
才突然有a[0],&a[0]數值是一樣的觀念,真是慚愧
還請各位幫忙,感恩。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.142.4.66
※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1416936127.A.191.html
※ 編輯: i78524 (220.142.4.66), 11/26/2014 01:27:13
→
11/26 01:43, , 1F
11/26 01:43, 1F
→
11/26 01:44, , 2F
11/26 01:44, 2F
→
11/26 01:45, , 3F
11/26 01:45, 3F
→
11/26 01:48, , 4F
11/26 01:48, 4F
→
11/26 05:06, , 5F
11/26 05:06, 5F
→
11/26 05:17, , 6F
11/26 05:17, 6F
→
11/26 05:18, , 7F
11/26 05:18, 7F
→
11/26 05:21, , 8F
11/26 05:21, 8F
→
11/26 05:23, , 9F
11/26 05:23, 9F
→
11/26 05:24, , 10F
11/26 05:24, 10F
→
11/26 05:28, , 11F
11/26 05:28, 11F
推
11/26 07:32, , 12F
11/26 07:32, 12F
→
11/26 07:32, , 13F
11/26 07:32, 13F
→
11/26 07:33, , 14F
11/26 07:33, 14F
謝謝樓上三位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
推
11/26 13:51, , 15F
11/26 13:51, 15F
→
11/26 13:51, , 16F
11/26 13:51, 16F
→
11/26 13:52, , 17F
11/26 13:52, 17F
→
11/26 13:52, , 18F
11/26 13:52, 18F
→
11/26 13:55, , 19F
11/26 13:55, 19F
→
11/26 13:56, , 20F
11/26 13:56, 20F
→
11/26 16:45, , 21F
11/26 16:45, 21F
推
11/26 19:56, , 22F
11/26 19:56, 22F
→
11/26 19:56, , 23F
11/26 19:56, 23F
→
11/26 19:57, , 24F
11/26 19:57, 24F
→
11/26 19:58, , 25F
11/26 19:58, 25F
→
11/26 19:58, , 26F
11/26 19:58, 26F
推
11/26 20:00, , 27F
11/26 20:00, 27F
→
11/26 20:01, , 28F
11/26 20:01, 28F
感謝LPH66與purpose的耐心解釋,這一次我完全弄懂了。
在學習C的時候,我總是挺在意記憶體與編譯器到底怎麼運作的。
因此,我想看到的就是這個層級的解釋。
真的十分謝謝你們!
也十分謝謝dirkc,幫我抓出筆誤(已修正)。
最後感謝所有幫我解惑的網友,感恩!
※ 編輯: i78524 (111.255.146.215), 11/26/2014 22:30:57
推
11/26 22:50, , 29F
11/26 22:50, 29F
→
11/26 22:50, , 30F
11/26 22:50, 30F