2013-02-19 108 views
0

我的三分球已经一个小疑问,请帮我..指针运算(指向数组)

void main() 
{ 
    int x[10],*px=x,*py; 
    int i; 
    py = &x[5], i = py - (px); 

    cout << "\nThe value of px=x is:" << (int)px << "\n"; 
    cout << "x[0]\t" << (int)x << "\n"; 
    cout << "x[5]\t" << (int)&x[5] << "\n"; 
    cout << "\nThe value of i=py-px is\n"; 
    cout << i; 
} 

在上面的程序,你得到的“我”为一体的的差异值整数相当于数组(内存)除以2(10/2 = 5)。为什么它不仅仅是差异即10?

在此先感谢!

+0

听起来。你能解释为什么你会期望结果是10吗? – 2013-02-19 15:57:17

+0

好吧,假设你得到x [5]的内存整数eqv为'-24',x [0]为'-34'..那么px-py结果不是-24 + 34 = 10? – vpp 2013-02-19 16:05:32

回答

1

如果你想获得两个使用指针数组元素之间的差异,您需要取消引用指针:

i = *py - *px; 

你有它编写的方式,你计算的区别两个地址应该是5,除非你把指针指向void *,在这种情况下,它应该是5 * sizeof(int)(不知道你是否在32位或64位系统上 - 答案会不同)。

哦,你不初始化x[]反正,所以像你期望的sizeof(INT)= 2的结果可能会有点... ...随机