[問題] 陣列記憶體位置計算

作者: JCwbear (白熊)   2016-03-29 11:57:37
開發平台(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
作者: boss0405 (boss)   2016-03-29 12:05:00
我記得之前有人PO文解釋過,還蠻詳細的,可以爬一下文
作者: Frozenmouse (*冰之鼠*)   2016-03-29 12:16:00
型態的關係嗎@@?&QQ -> int(*)[10]啊,找到之前的討論了:/對陣列名稱取址

Links booklink

Contact Us: admin [ a t ] ucptt.com