📜  C |高级指针|问题3

📅  最后修改于: 2021-05-25 23:31:22             🧑  作者: Mango

#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基础课程》。