面试题

#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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前段时间有同学评论说,指针方面的问题不太懂,今天小编就给大家带来非常详细的c语言之指针学习资料。 前言:复杂类型说...
    诸葛青云999阅读 30,956评论 0 16
  • iOS面试小贴士 ———————————————回答好下面的足够了------------------------...
    不言不爱阅读 2,014评论 0 7
  • 多线程、特别是NSOperation 和 GCD 的内部原理。运行时机制的原理和运用场景。SDWebImage的原...
    LZM轮回阅读 2,041评论 0 12
  • 最全的iOS面试题及答案 iOS面试小贴士 ———————————————回答好下面的足够了-----------...
    zweic阅读 2,722评论 0 73
  • 初来荆州,给我印象最深刻的是这里的天气。开学没多长时间,这里就进入了霉雨季节,但是这里的霉雨季节与我家长不一样。荆...
    东南風阅读 276评论 0 0