2012-05-31 134 views

回答

4

因爲p2 - p1< sizeof (int)。所以(int *) p2 - (int *) p1 == 0,這兩個指針之間的元素數量爲int

+0

thnx男人,我明白了! woo我只是錯過了da部分:) – vijay

3

因爲您正在調用實現定義的/未定義的行爲。一個int可能在您的平臺上的大小爲4,所以至少有一個指針沒有正確對齊。

實際上,這可能是因爲編譯器正在做一些類似於(p2/4) - (p1/4)的內容。

+0

...甚至是'(p2-p1)&〜3':-) – dasblinkenlight

+0

〜3從哪裏來? – Kylo

+0

是不是隻是平坦的*未定義*的行爲?您正在嘗試對無效指針進行指針運算。 –

0

我想你大概的意思做的是:

printf("%d", (int)(p2 - p1)); 

但是,這甚至不需要轉換,因爲兩個指針之間的差異返回一個符號整數類型(ptrdiff_t),這樣你就可以離開了類型轉換並將"%d"更改爲"%td"

+1

如果你省略了演員,你需要使用't'長度修飾符:'printf(「%td」,p2 - p1);''%d'用於'int'論據。 – ouah

相關問題