如果i>为什么ptrdiff_t会返回与i-j的正常差异数字?如果i< j并且返回大的无关数。 Ĵ

时间:2018-02-05 15:47:32

标签: c

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`

在相同的情况下,答案是一个不相关的整数。为什么呢?

2 个答案:

答案 0 :(得分:1)

代码的行为未定义。

指针算法,包括对两个指针之间差异的评估,仅在数组中定义(包含一个超过数组末尾的对象,为此目的,不是数组元素的对象被认为是单个元素数组)。

您的格式说明符%td 是正确的。

答案 1 :(得分:1)

Per 6.5.6 Additive operators the C standard第9段(强调我的):

  

当减去两个指针时,都指向元素   相同的数组对象,或者一个超过最后一个元素的对象   数组对象 ...

因此,您的结果是未定义的行为。