读书人

关于数组地址的计算,该如何解决

发布时间: 2012-02-08 19:52:21 作者: rapoo

关于数组地址的计算
int a[4],n;
int *pa=a,*pb=&a[3];
n=pb-pa+1;
cout < <n < < < <pb < <pa < <endl;

这个例子n得出的是数组的个数
可pa pb 是数组的地址啊 编译器是怎么算出来的呢

小弟初学 请教大家

[解决办法]
编译器不是算出来的,因为在pa,pd上本来存储的就是存放*pa,*pd数值的地址,所以你只是读取了pa,pd里面的数值而已,如果你想读这个地址里存放的值,必须加上*号,才能保证读到数值。
[解决办法]
pa,pb里面存储的是“地址”
0xeeff1234等等
地址也可以进行数值运算啊,所以可以把它认为是:
(a+0)-(a+3) = 3
a是数组的开始地址也是&a[0]
[解决办法]
还可以看看:
http://bbs.chinaunix.net/viewthread.php?tid=813131&extra=page%3D2%26filter%3Ddigest
[解决办法]
这个程序是死的
最后一个元素的地址与第一元素地址相减+1就得数组元素的个数,而地址与地址也是可以运算的
就想做这样的数学题:1-10有多少个数? 个数N=10(末)-1(首)+1
[解决办法]
LZ应该看看指针的+ -法的计算,比如一个int指针p,p++指针会向后移动4个字节,也就是一个int。

int a[3];
int *p1,*p2;
p1 = a[0];p2 = a[1];
这时p2和p1+1是相等的
[解决办法]
pa pb这两个变量存储的东西就是 "地址 ",可加减,
数组的地址是连续的,所以可以算出来
[解决办法]
地址值相减再除以sizeof(a[0])

读书人网 >C++

热点推荐