读书人

请问关于数组名与指针的有关问题

发布时间: 2012-02-13 17:20:26 作者: rapoo

请教关于数组名与指针的问题
int main()
{
int a[]={3,5,6,8};
cout < <a+1 < <endl;
cout < <&a+1 < <endl;
return 0;
}

结果二者之间相差10,我想应该不一样,但这个差值是如何得出的,为什么,非常感谢。

[解决办法]
分析指针的意义。

对指针的 + - 操作,
得到的结果是指针移动 元素类型长度 个字节。
所以,分析指针指向的元素类型,
然后就可以计算步长以及距离了 ~
[解决办法]
2个数减一减,怎么结果不是10呀。楼主一直在误导自己和所有人吧。
[解决办法]
我使用VC6,但是出来是12啊
0013FF74
0013FF80

0x0013FF80 - 0x0013FF74 = 0x0c

&a指向数组元素首地址
a+1加了一个sizeof(数组)的值
而&a+1加了一个sizeof(int)的值
[解决办法]
&a+1比&a应该是多了16个字节(十六进制显示),也就是那个int数组的长度
[解决办法]
上面回答错误了。
&a+1比&a多了10个字节???其实不是多了10个字节,是多了16个字节(16进制来表示的)

为什么会多了16个字节呢?
可以在程序中增加如下代码
cout < <&a < <endl;
cout < <&a+1 < <endl;
cout < <&a+2 < <endl;
cout < <&a+3 < <endl;

这样就很清晰了,每加一个1,地址是加了这个一维数组的个数(这里是4)乘以该数组类型占用大小(int是4),所以是16。

假如在数组初始化的时候,把数组变大,那么,&a+1就不是比&a多0x10个字节了啦。

这个,估计是数组的统一处理方式,比如二维、三维。。。

读书人网 >C++

热点推荐