作者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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1459223861.A.AAC.html
1F:推 boss0405: 我记得之前有人PO文解释过,还蛮详细的,可以爬一下文 03/29 12:05
2F:推 Frozenmouse: 型态的关系吗@@?&QQ -> int(*)[10] 03/29 12:16
3F:推 Frozenmouse: 啊,找到之前的讨论了:/对阵列名称取址 03/29 12:18