可能重复:
Why do these two pointer subtractions give different results?
char arr[] = "stackoverflow";
char *p1 = arr;
char *p2 = arr + 3;
printf("%d", (int*)p2 - (int*)p1);
答案是0 ..你可以解释为什么会这样吗?
答案 0 :(得分:4)
因为p2 - p1
是< sizeof (int)
。所以(int *) p2 - (int *) p1 == 0
,两个指针之间的int
个元素的数量。
答案 1 :(得分:3)
因为您正在调用实现定义/未定义的行为。您的平台上int
的大小可能是4,因此至少有一个指针没有正确对齐。
在实践中,可能是因为编译器正在做类似(p2 / 4) - (p1 / 4)
的事情。
答案 2 :(得分:0)
我认为你可能想要做的是:
printf("%d", (int)(p2 - p1));
但这甚至不需要转换,因为两个指针之间的差异会返回有符号整数类型(ptrdiff_t
),因此您可以省略类型转换并将"%d"
更改为"%td"
。