打印

数组a[],a与&a的区别

[复制链接]
1427|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
czr012|  楼主 | 2017-2-4 21:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
int a[5]={1,2,3,4,5};

a
&a
&a[0]
三个的值大小一样,但是类型不同
a的类型和&a[0]一样,是 int *,代表数组第一个元素(下标为0)的地址.
&a的类型是 int(*)[5],我们可以把数组看做一个基本数据类型,类型为int[5],也就是变量a代表了5个int大的空间,&a就是变量a的地址,占有空间为5个int.

a+1:数组中下标为1的元素的地址
&a+1:跨过a数组(5个int)的下一个地址



相关帖子

沙发
xyz549040622| | 2017-2-5 07:23 | 只看该作者
在表示指向数组a的首地址的时候,a/&a/&a[0]的效果都是一样的。
&a的类型是 int(*)[5],我们可以把数组看做一个基本数据类型,类型为int[5],也就是变量a代表了5个int大的空间,&a就是变量a的地址,占有空间为5个int.
这句的理解感觉有歧义。
a+1:数组中下标为1的元素的地址
这句的理解,应该限制使用场合了。

使用特权

评论回复
板凳
feelhyq| | 2017-2-5 10:01 | 只看该作者
学习了

使用特权

评论回复
地板
shcshc1234| | 2017-2-5 19:20 | 只看该作者
xyz549040622 发表于 2017-2-5 07:23
在表示指向数组a的首地址的时候,a/&a/&a[0]的效果都是一样的。
&a的类型是 int(*)[5],我们可以把数组看做 ...

一般&a怎么用
我都是直接用首地址然后+1+1寻址数组的

使用特权

评论回复
5
czr012|  楼主 | 2017-2-5 22:05 | 只看该作者
xyz549040622 发表于 2017-2-5 07:23
在表示指向数组a的首地址的时候,a/&a/&a[0]的效果都是一样的。
&a的类型是 int(*)[5],我们可以把数组看做 ...

a+1 仔细想是有限制,首先你的是个数组,其次数组元素得有2个或以上,这样好像才有意义

对于&a 不知朋友有没有好的理解方式?

使用特权

评论回复
6
czr012|  楼主 | 2017-2-5 22:13 | 只看该作者
shcshc1234 发表于 2017-2-5 19:20
一般&a怎么用
我都是直接用首地址然后+1+1寻址数组的

这个一般很少用吧,操作数组元素的话用a 就行,如果用&a+1的话所指的地址了已经超出数组的存储空间了

使用特权

评论回复
7
雪山飞狐D| | 2017-2-6 17:29 | 只看该作者
本帖最后由 雪山飞狐D 于 2017-2-6 17:33 编辑

a 本身就是数组“元素”的“步进”起始地址,a[1]其实真正含义是*(a+1)
&a 是整个大数组的“步进”,再加1的话就会跳出数组的边界
&a[0]只是存储这个数组里面元素的真实地址,加1的话跟编译器或者CPU有关了

使用特权

评论回复
8
czr012|  楼主 | 2017-2-6 21:17 | 只看该作者
雪山飞狐D 发表于 2017-2-6 17:29
a 本身就是数组“元素”的“步进”起始地址,a[1]其实真正含义是*(a+1)
&a 是整个大数组的“步进”,再加 ...

恩恩,多谢回答,我也是现学现用啊,还需要经验丰富的多多指导

使用特权

评论回复
9
雪山飞狐D| | 2017-2-6 22:38 | 只看该作者
czr012 发表于 2017-2-6 21:17
恩恩,多谢回答,我也是现学现用啊,还需要经验丰富的多多指导

嘿嘿,你在这个基础上思考一下 “二维”数组,二维两个字带了引号

使用特权

评论回复
10
阳光下的泡馍| | 2017-2-7 10:02 | 只看该作者
&a可以理解为一个数组空间地址吗?这个没有验证过呢,可以编译试试

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

16

帖子

0

粉丝