2
代碼:
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兩,如果我們考慮的差異地址他們會有所不同?
代碼:
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兩,如果我們考慮的差異地址他們會有所不同?
在指針算術中,減法返回不是以字節爲單位的差值,而是返回兩個指針之間的指針類型。
所以,既然a[3]
和a[0]
之間int
S上的差異是相同的c[3]
和c[0]
之間char
S上的差異 - 你得到兩個相同的結果。
爲指針減法操作的算術是一樣的東西:
type* p1 = ...
type* p2 = ...
p1 - p2 == (((int)p1) - (int(p2)))/sizeof(type)
和...這個是什麼意思呢?你真的*問什麼問題? – 2012-04-01 10:34:59