[问题] 阵列内存位置计算

楼主: 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