2012-04-01 56 views
2

可能重複:
Pointer Arithmetic In C陣列地址減法

代碼:

int main() 
{ 
    int a[ ] ={0,1,2,3,4}; 
    char c[ ] = {'s','a','n','j','u'}; 
    printf("%d\n",&a[3]-&a[0]); 
    printf("%d\n",&c[3]-&c[0]); 
    return 0; 
} 

爲什麼輸出來3 3兩,如果我們考慮的差異地址他們會有所不同?

+0

和...這個是什麼意思呢?你真的*問什麼問題? – 2012-04-01 10:34:59

回答

3

在指針算術中,減法返回不是以字節爲單位的差值,而是返回兩個指針之間的指針類型。

所以,既然a[3]a[0]之間int S上的差異是相同的c[3]c[0]之間char S上的差異 - 你得到兩個相同的結果。

爲指針減法操作的算術是一樣的東西:

type* p1 = ... 
type* p2 = ... 
p1 - p2 == (((int)p1) - (int(p2)))/sizeof(type)