[問題] 陣列記憶體位置計算
開發平台(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
推
03/29 12:05, , 1F
03/29 12:05, 1F
推
03/29 12:16, , 2F
03/29 12:16, 2F
推
03/29 12:18, , 3F
03/29 12:18, 3F