2012-05-31 37 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

相关问题