经典指数          
原因
2733
浏览数
0
收藏数
 

下面代码会输出什么()
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

     举报   纠错  
 
切换
1 个答案

答案:D

其实测试可以发现,a 和 &a 是同一个地址,printf("%d",

a),printf("%d", &a)结果是相同的。

但是其代表的含义不同,*(a+1)代表从a数组首地址跳跃一个int的长度,*(&a+1)表示从a数组首地址跳跃一个数组的长度,也就是指向a数组最后一个元素的下一个位置,因此*(ptr

- 1)表示a数组的最后一个元素。

 
切换
撰写答案