作者JCwbear (白熊)
看板C_and_CPP
標題[問題] 陣列記憶體位置計算
時間Tue Mar 29 11:57:37 2016
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
gcc 5.1
程式碼如下:
#include <stdio.h>
int main(void) {
// your code goes here
int QQ[10];
printf("1. %p\n", QQ);
printf("2. %p\n", QQ+1);
printf("3. %p\n", &QQ+1);
printf("4. %p\n", QQ+10);
return 0;
}
輸出結果:
1. 0xbf882f48
2. 0xbf882f4c
3. 0xbf882f70
4. 0xbf882f70
問題:
我知道第二項QQ+1的記憶位置是,是QQ的記憶體位置+4(因為陣列中每個元素都是整數
型別,佔4個Byte),但是第三項的記憶體位置我很好奇,為什麼是QQ陣列記憶結束的下
一個位置(QQ陣列index只到9,所以QQ+10剛好是QQ陣列結束完新的記憶體位置),因此
我嘗試將陣列改成20,結果得出的結果QQ+20與&QQ+1是相同記憶體位置的,雖然跟原本
預期的是一樣,但還是想問一下為什麼這樣子寫,結果是如此?
附上程式碼網址:
http://ideone.com/4zF6kL
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.240.128.2
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1459223861.A.AAC.html
推 boss0405: 我記得之前有人PO文解釋過,還蠻詳細的,可以爬一下文 03/29 12:05
推 Frozenmouse: 型態的關係嗎@@?&QQ -> int(*)[10] 03/29 12:16
推 Frozenmouse: 啊,找到之前的討論了:/對陣列名稱取址 03/29 12:18