数组中&a与&a[0]的区别 转载自http://blog.csdn.net/FX677588/article/details/74857473
在探讨这个问题之前,我们首先来看一道笔试题,如下:
【摘自牛客网】下列代码的结果是:(正确答案是 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的更多相关文章
- R语言中的正则表达式(转载:http://blog.csdn.net/duqi_yc/article/details/9817243)
转载:http://blog.csdn.net/duqi_yc/article/details/9817243 目录 Table of Contents 1 正则表达式简介 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 ...
- 比较C++中的4种类型转换方式(转自http://blog.csdn.net/hrbeuwhw/article/details/7884797)
C++的四种cast操作符的区别 Q:什么是C风格转换?什么是static_cast, dynamic_cast 以及 reinterpret_cast?区别是什么?为什么要注意? A:转换的含义是通 ...
- JVM中java类的加载时机(转载:http://blog.csdn.net/chenleixing/article/details/47099725)
Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的加载机制.类从被加载到虚拟机内存中开始,到卸载出内 ...
- js中index()的四种经典用法(转https://blog.csdn.net/superit401/article/details/51726826)
<!doctype html><html lang="en"> <head> <meta charset="UTF-8" ...
- [转帖] 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 ...
- 浏览器中的data类型的Url格式,data:image/png,data:image/jpeg!(源自:http://blog.csdn.net/roadmore/article/details/38498719)
所谓"data"类型的Url格式,是在RFC2397中 提出的,目的对于一些“小”的数据,可以在网页中直接嵌入,而不是从外部文件载入.例如对于img这个Tag,哪怕这个图片非常非常 ...
- 向txt文件中写入内容(覆盖重写与在末尾续写+FileOutputStream与FileWriter)(转发:https://blog.csdn.net/bestcxx/article/details/51381460)
!!!! 读取txt文件中的内容 import java.io.BufferedReader; import java.io.File; import java.io.FileReader; /** ...
- 抽象类和接口有什么区别---https://blog.csdn.net/csdn_aiyang/article/details/71171886
https://blog.csdn.net/csdn_aiyang/article/details/71171886 概念] 抽象类.具体类是相对的,并非绝对的.抽象是一种概念性名词,具体是一种可 ...
随机推荐
- 阿里云使用js 实现OSS图片上传、获取OSS图片列表、获取图片外网访问地址(读写权限私有、读写权限公共);
详情请参考:https://help.aliyun.com/document_detail/32069.html?spm=a2c4g.11186623.6.763.ZgC59a 或者https://h ...
- pycaffe简明文档
pycaffe简明文档 by ChrisZZ, imzhuo@foxmail.com 2018年01月18日19:00:56 说明 caffe的python接口没有官方说明文档,例如查看一个函数的用法 ...
- CentOS6.9安装Filebeat监控Nginx的访问日志发送到Kafka
一.下载地址: 官方:https://www.elastic.co/cn/downloads/beats/filebeat 百度云盘:https://pan.baidu.com/s/1dvhqb0 二 ...
- Codeforces Round #506 (Div. 3)
题解: div3水的没有什么意思 abc就不说了 d题比较显然的就是用hash 但是不能直接搞 所以我们要枚举他后面那个数的位数 然后用map判断就可以了 刚开始没搞清楚数据范围写了快速乘竟然被hac ...
- MediatR
1.MediatR是什么? 微软官方eshopOnContainer开源项目中使用到了该工具, mediatR 是一种中介工具,解耦了消息处理器和消息之间耦合的类库,支持跨平台 .net Standa ...
- 基于spring security 实现前后端分离项目权限控制
前后端分离的项目,前端有菜单(menu),后端有API(backendApi),一个menu对应的页面有N个API接口来支持,本文介绍如何基于spring security实现前后端的同步权限控制. ...
- 【AtCoder】ExaWizards 2019
ExaWizards 2019 C - Snuke the Wizard 发现符文的相对位置不变,直接二分某个位置是否到达最左或最右来计算 #include <bits/stdc++.h> ...
- 1000. A+B Problem
Description Calculate a+b Input Two integer a,b (0<=a,b<=10) Output Output a+b Sample Input 1 ...
- MySQL安装教程图解
核心提示:下面的是MySQL安装的图解,用的可执行文件安装的,详细说明了一下! 下面的是MySQL安装的图解,用的可执行文件安装的,详细说明了一下! MySQL下载地址 打开下载的mysql安装文件m ...
- java实现点选汉字验证码(转)
package com.rd.p2p.web; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; im ...