数组中a与a[0]的区别
在探讨这个问题之前,我们首先来看一道笔试题,如下:
【摘自牛客网】下列代码的结果是:(正确答案是 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]的区别相关推荐
- 堆初始化-二叉堆一般用数组来表示。例如,根节点在数组中的位置是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.以此类推.这种存储方式便于寻找 ...
- 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): ...
- MAC地址中的“O”和“0”怎么区别?命令行黑窗口界面的“O”和“0”怎么区别?
在Windows系统下查电脑mac地址的时候,通过cmd进入命令行黑窗口界面,敲"ipconfig /all"可以很方便查到. 有时候需要抄在本子上或者Excel等其他地方,很多人 ...
- 数组中的forEach和map的区别
大多数情况下,我们都要对数组进行遍历,然后经常用到的两个方法就是forEach和map方法. 先来说说它们的共同点 相同点 都是循环遍历数组中的每一项 forEach和map方法里每次执行匿名函数都支 ...
- 编程珠玑第八章——习题10查找数组中总和最接近0的子数组
内容来自互联网,做了一定修改 方法1: 这个问题和求子数组最大值优点相似,但解法不同,如果按照求子数组最大值的方法来求解,我们可以求出以j为截止的最大值和最小值,如果最大值和最小值都>0,那么最 ...
- 常考数据结构与算法:数组中相加和为0的三元组
题目描述 给出一个有n个元素的数组S,S中是否有元素a,b,c满足a+b+c=0?找出数组S中所有满足条件的三元组. 注意: 三元组(a.b.c)中的元素必须按非降序排列.(即a≤b≤c) 解集中不能 ...
- 理解一维数组中 buf、buf[0]、buf[0]、buf 四个符号的含义
本文内容摘自<C语言内核深度解析>一书的深入学习数组部分. 以 int buf[100]={0} 为例,集中讨论 buf.buf[0].&buf[0].&buf 四个字符含 ...
- python中pop()与pop(0)的区别
pop()弹出最后一个元素 pop(0)弹出第一个元素 复杂度: 代码如下: import timeitdef t6():list_1 = list(range(100))for i in range ...
- 蓝桥杯 ADV-119 算法提高 6-9删除数组中的0元素
编写函数CompactIntegers,删除数组中所有值为0的元素,其后元素向数组首端移动.注意,CompactIntegers函数需要接收数组及其元素个数作为参数,函数返回值应为删除操作执行后数组的 ...
最新文章
- linux进程莫名其妙被kill,Linux进程突然被杀掉(OOM killer),查看系统日志
- UWP crop image control
- eltwise_layer.cpp:170: error: (-215:Assertion failed) inputs.size() = 2 in function 'cv::dnn::Eltwi
- UVA 11383 Golden Tiger Claw 金虎爪(KM算法)
- 删除Windows 7自动创建的隐藏分区
- Python环境安装脚本,拷贝环境脚本,命令迁移模块(pip freeze requirements.txt)
- redis命令 举例
- SpringBoot之获取配置文件中的数据
- 实现文件下载的java代码
- linux用户间文件互传,linux之间的文件互传-scp命令
- mysql 标记_mysql-徽章/标记内容自用户上次看到以来已...
- 如何把windowsXP系统主题成Windows7风格windowsxp主题包
- Word:三线表,最底边变细,一直调不过来
- 如何解决微图不能在虚拟机上运行的问题
- GPU编程3--GPU内存深入了解
- Conflux项目进度报告 十月第一期
- 计算机专业 排名 国际,计算机专业世界大学排名ARWU
- 【ARM】寄存器与异常——第二篇
- php link rel= icon,link
- 蓝桥杯JAVA-7.集合(容器)在竞赛中的使用
热门文章
- java将map根据key分组_Java将List中的实体类按照某个字段进行分组并存放至Map中操作代码...
- ios12怎么滑屏解锁_对比苹果iOS12和安卓9.0,相互学习了哪些功能
- IC前端数字验证导学
- {*zoom:1;}作用
- 同济大学软件学院特聘教授朱少民谈《测试,从哪里来,到哪里去》
- 如何提高一个网站的排名?
- SRS系列一——实现RTMP直播
- 首个Nginx windows Stable 版--轻量级Web服务器Nginx 0.7.59
- BNUOJ29065鸣人的查克拉
- Dell戴尔笔记本电脑G15 5515 Ryzen Edition原装出厂Windows11系统恢复原厂oem系统