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