值相同但不相等

时间:2016-04-13 16:40:27

标签: c pointers

有人可以向我解释为什么以下代码输出0 0。我在数学上a-b == 0a == b

的印象
char* V1 = "hello, world!\n";

main(){
  F1(V1);
}

F1(A1){
  printf("%u %u\n", V1 - A1, V1 == A1);
}

1 个答案:

答案 0 :(得分:2)

正如@SouravGhosh所指出的,这里存在未定义的行为。仍然有趣的是,理解为什么第二个打印值有时为0,有时为1(取决于它运行的机器)。

缺少F输入的显式类型意味着A1隐式为int。函数调用F(V1)因此将指针V1强制转换为int。在某些机器上,这可能是一个缩小的转换,这就是为什么在某些机器上比较V1 == A1为真,而在其他机器上它是错误的。也许在某些机器上,V1 - A1中的两个参数都被强制转换为整数(因此值为0),但在比较V1 == A1(即ub)中尝试将A1强制转换为有效地址,并且失败或将其转移到不同的地址。