数组的地址的地址

链接:https://www.nowcoder.com/questionTerminal/c4e82d13a1684119841b8934ef838847?orderByHotValue=1&mutiTagIds=569&page=1&onlyReference=false
来源:牛客网

执行如下代码后输出结果为( )

int main()
{
int a[5]  = {1, 2, 3, 4, 5};
int *ptr = (int*)(&a + 1);
printf("%d, %d", *(a + 1), *(ptr - 1));
return;
}

A 1,1
B 1,3
C 3,3
D 2,5

答案: D
解析:数组a本身就表示数组的首元素的地址,因而&a表示数组的地址的地址,因而&a+1表示的地址为数组a的首字母地址+数组a的大小。而(int *)(&a+1)即把其强制转换为int *类型,因而相当于ptr = &a+1。从而*(ptr-1)即数组a最后一个元素,因而输出是2,5

posted @ 2019-08-20 20:54  林深处见鹿  阅读(1013)  评论(0)    收藏  举报