指针减法不指向同一数组的不同元素在 C 中有效吗?
下面的东西是否能保证按照 C 标准工作?我依稀记得读到这是无效的?
int * a;
int * b;
a = (int*) 100;
b = (int*) 200;
printf("%d\n", b-a);
这会给我25吗?
来自 C 规范,附录 J.2未定义的行为:
不指向或超出同一数组对象的指针将被减去 (6.5.6)。
6.5.6 加法运算符,第 9 段说:
当两个指针相减时,两个指针都应指向同一个数组对象的元素,或者指向数组对象最后一个元素之后的一个;结果是两个数组元素的下标之差。
就是这样 - 你的例子导致了未定义的行为。也就是说,在大多数系统上它都能正常工作。你可能do想要改变你的printf
格式化为%td
表明您正在打印ptrdiff_t
type.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)