#include
int main()
{
int a[5] = {1,2,3,4,5};
int *ptr = (int*)(&a+1);
printf("%d %d", *(a+1), *(ptr-1));
return 0;
}
(A) 2 5
(B)垃圾价值
(C)编译器错误
(D)分割错误答案: (A)
说明:程序打印“ 2 5”。
由于编译器在访问数组元素之前先在指针中转换数组操作,因此(a + 1)指向2。
表达式(&a + 1)实际上是数组末尾(地址5之后)的地址,因为&a包含大小为5 * integer_size的项的地址,当我们这样做时(&a + 1),指针将增加5 * integer_size。
ptr是类型转换为int *的,所以当我们执行ptr -1时,我们得到的地址为5
这个问题的测验
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。