真的不想这样, 这样的题有啥意思, 谁会用到吗, 就当增加人知吧
对一个数组取&的时候, 出现了如下的问题:
#include <stdio.h>
int main()
{
const int MAXN = 8;
int a[MAXN] = {1, 2, 4, 8, 16, 32, 64, 128};
int *p = (int*)(&a + 1 );
printf("%d\n", *(p - 2));
return 0;
}
运行如下为什么, 因为&a 取的是数组的首地址, +1就相当偏移一个数组的大小,于是指向数组的end的位置(这个位置是有效的, 以前讨论过), 在-2是int指针减2, 指向64了。
当程序如下的时候:
#include <stdio.h>
int main()
{
const int MAXN = 8;
int a[MAXN] = {1, 2, 4, 8, 16, 32, 64, 128};
int *p = (int*)(a + 1 );
printf("%d\n", *p);
return 0;
}
运行如下: