下面代码会输出什么() int main(int argc, char **argv) { int a[4] = {1, 2, 3, 4}; int *ptr = (int *)(&a + 1); printf("%d", *(ptr - 1)); } 1 2 3 4
int main(int argc, char **argv) { int a[4] = {1, 2, 3, 4}; int *ptr = (int *)(&a + 1); printf("%d", *(ptr - 1)); }
答案:D
其实测试可以发现,a 和 &a 是同一个地址,printf("%d",
a),printf("%d", &a)结果是相同的。
但是其代表的含义不同,*(a+1)代表从a数组首地址跳跃一个int的长度,*(&a+1)表示从a数组首地址跳跃一个数组的长度,也就是指向a数组最后一个元素的下一个位置,因此*(ptr
- 1)表示a数组的最后一个元素。