PDA

查看完整版本 : C語言有關陣列指標常數的記憶體配置問題


哈啦
2015-07-03, 04:22 PM
我正在閱讀「C語言教學手冊」。其中在「指標10-33」這頁下方有個圖解,我有點搞糊塗了。

如圖:

http://i1371.photobucket.com/albums/ag289/anytime543/IMG_0830_zpss4xoqb6a.jpg

在a[5]陣列中,a是陣列名稱也是指標常數,書上說它本身的「值」就是它自己的位址,

所以如果要求a,&a以及&a[0]的%p,三者是都一樣的,這點可以理解。

但如果從書上畫的配置的記憶體來看,a本身的那塊記憶體不就是a[0]嗎?而a[0]裡面放的值不是整數32嗎?那它的位址要存在哪裡呢?

請教一下先進。:bow

yumi
2015-07-04, 07:54 AM
a本身的那塊記憶體就是a[0],存的数字就是32
这个位址是要有的,占用4-8个字节,在32位机器上占用4字节,在64位机器上占用8字节,来存放这个位址。

比如double b[10000],每个元素占用8字节,10000个元素就是80000字节。
但是位址只保存1个(b[0]的)位址即可,其余的自动推算。

哈啦
2015-07-04, 09:59 AM
謝謝,你的意思是說,在a[0]這塊記憶體中除了有存數字32之外,還另存了自己的位址的值例如書上說的0022FF38?
還是「另有」一塊記憶體來存放0022FF38?

thanks.

yumi
2015-07-04, 01:47 PM
另有一块记忆体存放0022ff38

哈啦
2015-07-04, 05:59 PM
可是按照書上說的,a的%p和&a的%p是一樣的?也就是說,用%p來求a的內容和用%p來求a的位址,二者其實是一樣的?