在探讨这个问题之前,我们首先来看一道笔试题,如下:
  【摘自牛客网】下列代码的结果是:(正确答案是 C)

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

  A、3,5   B、2,4   C、2,5   D、3,4
  下面我们来分析一下选择C的原因,解释清楚这个题的正确答案,你就能清楚数组中&a与&a[0]存在什么区别了。
  题目中首先定义了存放5个int类型空间大小的内存,然后初始化5个数。我们知道直接使用数组的名字a表示的是一个指向数组首地址的指针,所以直接a与&a[0]是相同的意思,都表示数组的首地址。所以*(a+1)很好理解,假设a地址是0x1000,就是取(0x1000+sizeof(int))地址的数,由于数组的物理地址是连续的,当然就是取2。
  那&a表示什么意思呢,相当于取存放指向数组首地址的指针的存储地址,话有些绕,但是细细品味你就会发现,它就相当于二维指针,假设每个一维指针指向一排数组(当然除了第一个一维数组的指针之外实际都没有申请,但是在访问野指针之前计算机也不知道那块地址是否存在,但的确可以由物理地址连续性来获取这块地址的表示),所以简言之&a表示第一排数组,&a+1就是表示第二排数组(就是5*sizeof(int)=5*4=20空间大小后一段空间的首地址)。
  有了上面的介绍就好理解了,*(ptr-1)是表示取(0x1000+5*sizeof(int)-sizeof(int))地址中的数,算得为5。
  总结:
  &a[0]表示数组的首地址,与直接a相同意义。而&a表示存储指向数组首地址的指针的地址,可以用二维指针来理解。

  其他二维指针和数组更详细说明请阅读博文:http://blog.csdn.net/fx677588/article/details/69592329


  个人学习记录,由于能力和时间有限,如果有错误望读者纠正,谢谢!
  转载请注明出处:http://blog.csdn.net/FX677588/article/details/74857473

数组中a与a[0]的区别相关推荐

  1. 堆初始化-二叉堆一般用数组来表示。例如,根节点在数组中的位置是0,第n个位置的子节点分别在2n+1和 2n+2-icoding-void init_min_heap(PMinHeap pq, int

    堆初始化 二叉堆一般用数组来表示.例如,根节点在数组中的位置是0,第n个位置的子节点分别在2n+1和 2n+2.  因此,第0个位置的子节点在1和2,1的子节点在3和4.以此类推.这种存储方式便于寻找 ...

  2. Python课堂笔记之判断一个数组中是否含有数字0

    判断一个数组中是否含有数字0的3种方法: lst1=[1,3,4] lst2=[0,6,7] lst3=[[1,3,4],[0,6,7]]#1.如果有0,True for i in range(2): ...

  3. MAC地址中的“O”和“0”怎么区别?命令行黑窗口界面的“O”和“0”怎么区别?

    在Windows系统下查电脑mac地址的时候,通过cmd进入命令行黑窗口界面,敲"ipconfig /all"可以很方便查到. 有时候需要抄在本子上或者Excel等其他地方,很多人 ...

  4. 数组中的forEach和map的区别

    大多数情况下,我们都要对数组进行遍历,然后经常用到的两个方法就是forEach和map方法. 先来说说它们的共同点 相同点 都是循环遍历数组中的每一项 forEach和map方法里每次执行匿名函数都支 ...

  5. 编程珠玑第八章——习题10查找数组中总和最接近0的子数组

    内容来自互联网,做了一定修改 方法1: 这个问题和求子数组最大值优点相似,但解法不同,如果按照求子数组最大值的方法来求解,我们可以求出以j为截止的最大值和最小值,如果最大值和最小值都>0,那么最 ...

  6. 常考数据结构与算法:数组中相加和为0的三元组

    题目描述 给出一个有n个元素的数组S,S中是否有元素a,b,c满足a+b+c=0?找出数组S中所有满足条件的三元组. 注意: 三元组(a.b.c)中的元素必须按非降序排列.(即a≤b≤c) 解集中不能 ...

  7. 理解一维数组中 buf、buf[0]、buf[0]、buf 四个符号的含义

    本文内容摘自<C语言内核深度解析>一书的深入学习数组部分. 以 int buf[100]={0} 为例,集中讨论 buf.buf[0].&buf[0].&buf 四个字符含 ...

  8. python中pop()与pop(0)的区别

    pop()弹出最后一个元素 pop(0)弹出第一个元素 复杂度: 代码如下: import timeitdef t6():list_1 = list(range(100))for i in range ...

  9. 蓝桥杯 ADV-119 算法提高 6-9删除数组中的0元素

    编写函数CompactIntegers,删除数组中所有值为0的元素,其后元素向数组首端移动.注意,CompactIntegers函数需要接收数组及其元素个数作为参数,函数返回值应为删除操作执行后数组的 ...

最新文章

  1. linux进程莫名其妙被kill,Linux进程突然被杀掉(OOM killer),查看系统日志
  2. UWP crop image control
  3. eltwise_layer.cpp:170: error: (-215:Assertion failed) inputs.size() = 2 in function 'cv::dnn::Eltwi
  4. UVA 11383 Golden Tiger Claw 金虎爪(KM算法)
  5. 删除Windows 7自动创建的隐藏分区
  6. Python环境安装脚本,拷贝环境脚本,命令迁移模块(pip freeze requirements.txt)
  7. redis命令 举例
  8. SpringBoot之获取配置文件中的数据
  9. 实现文件下载的java代码
  10. linux用户间文件互传,linux之间的文件互传-scp命令
  11. mysql 标记_mysql-徽章/标记内容自用户上次看到以来已...
  12. 如何把windowsXP系统主题成Windows7风格windowsxp主题包
  13. Word:三线表,最底边变细,一直调不过来
  14. 如何解决微图不能在虚拟机上运行的问题
  15. GPU编程3--GPU内存深入了解
  16. Conflux项目进度报告 十月第一期
  17. 计算机专业 排名 国际,计算机专业世界大学排名ARWU
  18. 【ARM】寄存器与异常——第二篇
  19. php link rel= icon,link
  20. 蓝桥杯JAVA-7.集合(容器)在竞赛中的使用

热门文章

  1. java将map根据key分组_Java将List中的实体类按照某个字段进行分组并存放至Map中操作代码...
  2. ios12怎么滑屏解锁_对比苹果iOS12和安卓9.0,相互学习了哪些功能
  3. IC前端数字验证导学
  4. {*zoom:1;}作用
  5. 同济大学软件学院特聘教授朱少民谈《测试,从哪里来,到哪里去》
  6. 如何提高一个网站的排名?
  7. SRS系列一——实现RTMP直播
  8. 首个Nginx windows Stable 版--轻量级Web服务器Nginx 0.7.59
  9. BNUOJ29065鸣人的查克拉
  10. Dell戴尔笔记本电脑G15 5515 Ryzen Edition原装出厂Windows11系统恢复原厂oem系统