数组名a与&a的区别
来源:互联网 发布:淘宝店运营工作职责 编辑:程序博客网 时间:2024/05/16 08:20
这里我们先看看数组名代表的是什么,这个概念可能大家有所误解,认为数组名代表的就是数组的地址,当然,数组名代表的是一个地址,但是关键是,通过这个地址,我们关注的是它能取得多大空间的数据的值,例如对于一个char 类型的地址,我们能够取得一个字节的值,对于一个int型的地址,我们能够取得4个字节的值。
这里我们以整形数组为讲解:int a[4];
a是一个地址,我们知道a其实本来的面目应该是:a+0,只不过这个0我们就省了,*(a+0)是什么呢,这个代表的就是取得第一个元素的内容,也就是a[0],所以我们可以知道a它代表的应该是第一个(下标为0)元素的地址。
这里我们先从另外一个方面来理解什么是数组,其实我们可以把数组假设为一个基本类型变量(数组名的内涵在于其指代实体是一种数据结构,这种数据结构就是数组http://www.cnblogs.com/wuzhenbo/archive/2012/05/29/2523777.html),它的类型为 int [4].也就是变量a这个对象代表的就是4个int那么大小的一个区间,而且不可分割。它和一般变量不同的地方在于,它的操作受限,不能像一般变量那样,直接通过赋值符号一次性将整个区间的值赋值给另外一个相同的数组变量。而只能通过下标来一个个元素的赋值。
通过上面的分析,&a就好理解了,他就是变量a的地址,这个变量a的作用范围是四个int空间的数据,也就是如果将&a赋给某个变量p,p的类型应该是:int (*)[4];也就是指向包含4个int数据的数组的指针。
再来看看a+1和&a+1的区别,a+1表示的是数组第一个元素地址,&a+1表示的是跨过a数组的下一个地址。通过图来表示可能更加清晰可理解:
对指针进行加1 操作,得到的是下一个元素的地址,而不是原有地址值直接加1。所以,一个类型为T的指针的移动,以sizeof(T)移动单位。
其实&a和a的值倒是完全一样的,都是下标为0的元素的地址,关键在于它们的作用域不同,在网上看到一个比喻觉得挺恰当的,长沙在长沙市来说是中心,同时在湖南省来说,也是湖南省的政治中心,长沙即作为市的中心,也作为省的中心,但是在不同的范围内,表达的意思是不一样的。
- 数组名a与&a的区别
- 数组名a与&a的区别
- 数组名 a 与&a的区别
- a为数组名,a与&a的区别
- a为数组名,a与&a的区别
- C++学习之数组名a与&a的区别
- 数组名a和&a的区别
- 数组名a和&a 的区别
- 数组名a和&a的区别
- 数组名a和&a的区别
- 数组名a和&a的区别
- C++的基础知识(十一)--数组做函数参数、数组名a与&a区别、数组名a的"数据类型"
- C语言学习知识点(四):数组名a与取地址数组名&a的区别
- 数组名a+1和&a+1的区别
- C++数组名a和&a的区别
- C++数组名a和&a的区别
- 数组 a 与 &a 的区别联系
- 数组中a与&a的区别
- android学习笔记之客户端与服务端保持session登录状态
- axis2 1.5.5 + Websphere 8.0 ,FileUploadException 与 NoInitialContextException 的解决办法
- 听故事搞懂多线程开发-- 屎壳郎老板和它的收费公厕
- Centos中将openjdk切换为Oracle Jdk导致Tomcat无法正常启动的问题
- 现今市场对异构并行计算领域人员的需求
- 数组名a与&a的区别
- RabbitMQSender
- 【记录帖】svn常用命令
- POJ 1459
- iOS 9学习系列:如何使用ATS提高应用的安全性
- Gulp构建Android项目,安装APK
- Unity动态生成带碰撞体的LineRenderer
- 将Maven项目打包成可执行jar文件(引用第三方jar)
- 九度oj 1117