面试题

作者: guanjianhe | 来源:发表于2018-08-29 14:18 被阅读0次
    #include <stdio.h>
    
    int main()
    {
        int a[5]={1,2,3,4,5};
        int *p = (int *)(&a+1);
       // printf("%p\t%p\n",a,p);
        printf("%d\t%d",*(a+1),*(p-1));
    
        return 0;
    }
    /*
    输出:
    //0x7ffd9226ad50  0x7ffd9226ad64
    2   5
    */
    

    这题初看可能会直接得出答案是2 1,但真正答案是2 5,原因是(&a+1)这一句,a是一个数组名,也代表该数组的首地址,&a表示地址的地址,也就是二维指针了。这个二维指针是指向包含 5个成员的int型数组,相当于一个数组指针int (*p)[5],所以(&a+1)就指向了下个包含5个成员的int型数组首地址,之后又在外面做了类型转换(int *)转为一维指针,所以p-1就指向了上个数组的末地址,也就是a+4,最终答案*(p-1)就是5

    相关文章

      网友评论

          本文标题:面试题

          本文链接:https://www.haomeiwen.com/subject/mmnhwftx.html