2013-02-19 97 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的結果可能會有點... ...隨機