是否减去指向同一数组的不同元素的指针在C中是否有效?
下面的东西是否保证按照C标准工作?我依稀记得读到这是无效的吗?
int * a;
int * b;
a = (int*) 100;
b = (int*) 200;
printf("%d\n", b-a);
Run Code Online (Sandbox Code Playgroud)
这会给我25.
从C规范,附录J.2 未定义的行为:
不指向同一数组对象或仅指向同一数组对象的指针被减去(6.5.6).
6.5.6添加剂操作者,第9段说:
当减去两个指针时,两个指针都指向同一个数组对象的元素,或者指向数组对象的最后一个元素的元素; 结果是两个数组元素的下标的差异.
你有它 - 你的例子导致未定义的行为.也就是说,在大多数系统上它都可以正常工作.你可能也想改变你的printf格式%td,以表明你打印一个ptrdiff_t类型.