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

main()
{
int a[5]={1,2,3,4,5};
int *ptr=(int *)(&a+1);
printf("%d,%d",*(a+1),*(ptr-1));
}
1
2
3
4
5
6
  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
---------------------
作者:无鞋童鞋
来源:CSDN
原文:https://blog.csdn.net/fx677588/article/details/74857473
版权声明:本文为博主原创文章,转载请附上博文链接!

数组中&a与&a[0]的区别 转载自http://blog.csdn.net/FX677588/article/details/74857473的更多相关文章

  1. R语言中的正则表达式(转载:http://blog.csdn.net/duqi_yc/article/details/9817243)

    转载:http://blog.csdn.net/duqi_yc/article/details/9817243 目录 Table of Contents 1 正则表达式简介 2 字符数统计和字符翻译 ...

  2. queue_delayed_work和queue_work区别 (转http://blog.csdn.net/dosculler/article/details/7968101)

    queue_delayed_work和queue_work 一.参考文献: 1)http://www.linuxidc.com/Linux/2011-08/41655.htm queue_delaye ...

  3. 比较C++中的4种类型转换方式(转自http://blog.csdn.net/hrbeuwhw/article/details/7884797)

    C++的四种cast操作符的区别 Q:什么是C风格转换?什么是static_cast, dynamic_cast 以及 reinterpret_cast?区别是什么?为什么要注意? A:转换的含义是通 ...

  4. JVM中java类的加载时机(转载:http://blog.csdn.net/chenleixing/article/details/47099725)

    Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的加载机制.类从被加载到虚拟机内存中开始,到卸载出内 ...

  5. js中index()的四种经典用法(转https://blog.csdn.net/superit401/article/details/51726826)

    <!doctype html><html lang="en"> <head> <meta charset="UTF-8" ...

  6. [转帖] select、poll、epoll之间的区别总结[整理] + 知乎大神解答 https://blog.csdn.net/qq546770908/article/details/53082870 不过图都裂了.

    select.poll.epoll之间的区别总结[整理] + 知乎大神解答 2016年11月08日 15:37:15 阅读数:2569 http://www.cnblogs.com/Anker/p/3 ...

  7. 浏览器中的data类型的Url格式,data:image/png,data:image/jpeg!(源自:http://blog.csdn.net/roadmore/article/details/38498719)

    所谓"data"类型的Url格式,是在RFC2397中 提出的,目的对于一些“小”的数据,可以在网页中直接嵌入,而不是从外部文件载入.例如对于img这个Tag,哪怕这个图片非常非常 ...

  8. 向txt文件中写入内容(覆盖重写与在末尾续写+FileOutputStream与FileWriter)(转发:https://blog.csdn.net/bestcxx/article/details/51381460)

    !!!! 读取txt文件中的内容 import java.io.BufferedReader; import java.io.File; import java.io.FileReader; /** ...

  9. 抽象类和接口有什么区别---https://blog.csdn.net/csdn_aiyang/article/details/71171886

    https://blog.csdn.net/csdn_aiyang/article/details/71171886 概念]   抽象类.具体类是相对的,并非绝对的.抽象是一种概念性名词,具体是一种可 ...

随机推荐

  1. 蓝桥杯第十届真题B组(2019年)

    2019年第十届蓝桥杯大赛软件类省赛C/C++大学B组# 试题 A:组队# 本题总分:5分[问题描述]作为篮球队教练,你需要从以下名单中选出 1号位至 5号位各一名球员,组成球队的首发阵容.每位球员担 ...

  2. SqlServer 四大排名函数(ROW_NUMBER、RANK、DENSE_RANK、NTILE)简介

    CREATE TABLE [dbo].[Order]( [ID] [int] IDENTITY(1,1) NOT NULL, [UserId] [int] NOT NULL, [TotalPrice] ...

  3. MyBatis - 4.动态SQL

    动态 SQL是MyBatis强大特性之一.极大的简化我们拼装SQL的操作. 动态 SQL 元素和使用 JSTL 或其他类似基于 XML 的文本处理器相似. MyBatis 采用功能强大的基于 OGNL ...

  4. rsa证书ssh登陆服务器

    好久不用,又生疏了. 今晚实操了一下,作一个记录. 使用rsa的密钥对登陆linux服务器,主要是为了安全. 这种证书级别的登陆,比最复杂的root用户名和帐号的安全性都要高一个等级. 至少服务器不会 ...

  5. Give root password for maintenance(or type control -D to continue)

    2017-09-30 18:12:08 1:错误如图,本来开机准备用一下虚拟机,就出现一个这,为啥记录一下呢,因为网上好多不是很靠谱. 原因可能是之前关闭虚拟机的时候不小心出现异常了: 2:解决办法: ...

  6. eclipse中文乱码修改新方法

    方法背景:想看别人的JAVA项目,导入eclipse后出现中文乱码,在设置了所有的工作空间都为UTF-8以后都没有用,并且项目Resource选项没有GBK选项,或统一选择GBK后会使其他项目出现中文 ...

  7. kafka 备忘

    创建topic/usr/local/kafka/bin/kafka-topics.sh --create --zookeeper 127.0.0.1:2181 --partitions 3 --rep ...

  8. element-ui上传文件带token

    template> <el-upload action="test" :headers="myHeaders"></el-upload& ...

  9. 【BZOJ3379】[Usaco2004 Open]Turning in Homework 交作业

    题解: 比较容易想到二分答案+时间逆流 这样就变成了经典的路灯问题 f[a][b][0/1] 其实可以不用二分答案 根据倒着考虑我们会发现一定是先走旁边的再走中间的 计算到当前点+下课时间所需的最小时 ...

  10. pandas处理finance.yahoo股票数据 WTI CL USO OIL

    1.参考 用Python做科学计算-基础篇 »matplotlib-绘制精美的图表 »快速绘图 使用pyplot模块绘图 2.数据来源 CL USO OIL 3.代码 #encoding='utf-8 ...