printf("%td",i-j); when `*i > *j` the type of both `i` and `j` is `int`
如果我们采取,
i = &a;
j = &b;
我们将获得正常的整数差异,即42-23 = 19
但是如果我们使用这段代码,
printf("%td\n",i- j); if `*i < *j`
在相同的情况下,答案是一个不相关的整数。为什么呢?
答案 0 :(得分:1)
代码的行为未定义。
指针算法,包括对两个指针之间差异的评估,仅在数组中定义(包含一个超过数组末尾的对象,为此目的,不是数组元素的对象被认为是单个元素数组)。
您的格式说明符%td
是正确的。
答案 1 :(得分:1)
Per 6.5.6 Additive operators ,the C standard第9段(强调我的):
当减去两个指针时,都指向元素 相同的数组对象,或者一个超过最后一个元素的对象 数组对象 ...
因此,您的结果是未定义的行为。