int *常量的强制转换

时间:2012-09-01 13:23:45

标签: c pointers

#include <stdio.h>

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

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

2 个答案:

答案 0 :(得分:4)

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

  

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

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

  

我的输出为10 ..但是无法弄清楚如何?

如果您的计算机上的sizeof(int)为4,则将未定义的行为放在一边,那么地址2060之间确实有10个整数。这就是指针减法给你的东西:元素数量的差异


teppic所述,您的printf错误。 2个指针之间的差异是ptrdiff_t。格式应该类似于%td

答案 1 :(得分:1)

既不是空指针也不指向有效对象的指针是无效指针。使用无效指针(如读取其值)是未定义的行为。