打印
[开发工具]

数组问题求指导

[复制链接]
1006|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fengyefeng|  楼主 | 2014-12-22 00:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
int a[5]={1,2,3,4,5};
&a+1=0x200005a8        //&a表示的是数组的首地址,加一偏移一个整体单元
a+1=0x20000598        //a是数组首元素的地址,加一表示下一个元素的地址
sizeof(a)=20        //a是数组首元素的地址,为什么这里为20??

问题是:sizeof(a)=20        //a是数组首元素的地址,为什么这里为20??
感谢各位回答
沙发
diweo| | 2014-12-22 08:27 | 只看该作者
a本身是一个数组,只是在运算的时候,为了方便,a也可以表示这个数组的首地址。
所以,sizeof(a)并不是说首地址的大小,而是指整个数组的大小。
5个元素,每个元素都是Int(32位),就是20了。

使用特权

评论回复
板凳
mmuuss586| | 2014-12-22 12:21 | 只看该作者

楼上正解;
建议楼主查查sizeof函数的作用;

使用特权

评论回复
地板
fengyefeng|  楼主 | 2014-12-22 22:20 | 只看该作者
diweo 发表于 2014-12-22 08:27
a本身是一个数组,只是在运算的时候,为了方便,a也可以表示这个数组的首地址。
所以,sizeof(a)并不是说首 ...

首先谢谢你的回答,diweo还请再次请教一下:
首先是&a+1=0x200005a8        //&a表示的是数组的首地址,加一偏移一个整体单元
因此&a中的地址才是数组的首地址它和&a[0]值相同但意义不同,
a+1=0x20000598        //a是数组首元素的地址,加一表示下一个元素的地址
这句说明a才是数组首元素的地址
以上的内容我在CPU中跑过了,确实无误
但是问题来了,既然a是首元素的首地址为什么对一个首地址求大小会得出整个数组的长度呢?上面是不是哪里出错了?还请指教,谢谢你

使用特权

评论回复
5
diweo| | 2014-12-23 08:34 | 只看该作者
fengyefeng 发表于 2014-12-22 22:20
首先谢谢你的回答,diweo还请再次请教一下:
首先是&a+1=0x200005a8        //&a表示的是数组的首地址,加 ...

a既可以表示数组本身,也可以表示它的首元素地址。
或者你这样理解吧,编译器比较聪明,它看到sizeof(a),它就把a理解成是数组,看到*(a+1)就把a理解成是地址。
另外就是建议你仔细看看sizeof()的用法。

使用特权

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

本版积分规则

21

主题

87

帖子

1

粉丝