【发布时间】:2013-07-22 16:56:04
【问题描述】:
下面是代码。谁能解释一下它背后的逻辑。
#include<stdio.h>
int main()
{
int *i,*j;
i=(int *)60;
j=(int *)20;
printf("%d",i-j);
return 0;
}
【问题讨论】:
-
i - j是指针差异,系统中 int 的大小是 4 个字节,value-wsie 差异是40即10*sizeof(int),10 个位置相距很远。 -
你们为什么要支持这个?
-
此外,如果
60和20不是有效地址,程序将调用未定义的行为。 -
你应该使用
%td而不是%d,%td是指针运算的格式说明符。 -
@H2CO3 当双关指针永远不会被取消引用时,它是否会调用未定义的行为?还是代码在某个时候更改了...?我想,也许确实如此,因为“不相关数组中的指针之间的指针算术是未定义的”情况,但我认为在这种特殊情况下,“未定义”仍然会做一些“合理”的事情......