This question already has answers here:
Pointer/Address difference [duplicate]

(3个答案)


已关闭6年。




我在笔试中问过这个问题。
在我的lapi上运行以下代码时,我的输出为10
#include<stdio.h>
int main()
{
  int *i, *j;/* two pointer variable*/
  i = (int *)60;
  j = (int *)20;
  printf("%d \n",i-j);
  return 0;
}

输出 :
10

谁能告诉我为什么输出是10

最佳答案

根据C标准(6.5.6加法运算符)



因此您的程序具有未定义的行为,因为指针没有指向同一数组的元素。

没关系,似乎编译器只是生成一个用于减去两个指针的目标代码,而与指针是否指向同一数组的元素无关(它信任您)。

在这种情况下,根据指针算法,两个指针之间的差异是可以在两个指针之间放置在内存中的元素数量。

在您的情况下,sizeof( int )等于4。因此,如果10等于sizeof( int ),那么大小为40字节的内存可以容纳int类型的4元素。

该值10是由printf函数输出的。

关于c - 两个指针变量之间的差异,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27885823/

10-14 13:10
查看更多