#include <stdio.h>
main() {
int *i,*j;
i = (int *) 60;
j = (int *) 20;
printf("%d\n", i - j);
}
此代码的输出是什么?我用指针做了很多工作,但从未遇到过这样的代码。
答案 0 :(得分:4)
这是未定义的行为,因为你要减去指向同一数组对象内的指针。
当减去两个指针时,两者都应指向。的元素 相同的数组对象,或者超过数组最后一个元素的数组 宾语;结果是下标的差异 两个数组元素。
由于其他原因,也可能是未定义的行为,例如使用指向无效对象的指针。
我的输出为10 ..但是无法弄清楚如何?
如果您的计算机上的sizeof(int)
为4,则将未定义的行为放在一边,那么地址20
和60
之间确实有10个整数。这就是指针减法给你的东西:元素数量的差异。
如teppic
所述,您的printf错误。 2个指针之间的差异是ptrdiff_t
。格式应该类似于%td
。
答案 1 :(得分:1)
既不是空指针也不指向有效对象的指针是无效指针。使用无效指针(如读取其值)是未定义的行为。