0
#include <stdio.h>

main() {
  int *i,*j;
  i = (int *) 60;
  j = (int *) 20;
  printf("%d\n", i - j);
}

这段代码的输出是什么?我用指针做了很多工作,但从未遇到过这样的代码。

4

2 回答 2

4

这是未定义的行为,因为您要减去不指向同一数组对象内的指针。

当两个指针相减时,两者都应指向同一个数组对象的元素,或者指向数组对象的最后一个元素;结果是两个数组元素的下标之差。

由于其他原因,它也可能是未定义的行为,例如使用指向无效对象的指针。

我得到 10 的输出 ..但不知道怎么做?

撇开未定义的行为不谈,如果你的机器上是 4,那么地址和sizeof(int)之间确实有 10 个整数。这就是指针减法给你的:元素数量的差异2060


如前所述teppic,您的 printf 是错误的。2个指针之间的区别是a ptrdiff_t。格式应该类似于%td.

于 2012-09-01T13:25:09.463 回答
1

既不是空指针也不是指向有效对象的指针是无效指针。任何对无效指针的使用,比如读取它的值,都是未定义的行为。

于 2012-09-01T13:28:43.990 回答