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