printf("%td",ij); 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
是正确的。
以上就是c/c++开发分享如果i> j,为什么ptrdiff_t返回一个正常的差异数字i-j如果i <j则返回一个大的无关数字相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/522130.html