0

我正在编写一个简单的代码来以后序迭代地打印二叉树,但我偶然发现了这个奇怪的调试步骤:

在此处输入图像描述

图像没有以任何方式进行 photoshop 或修改,“locals”窗口显示两个指针具有不同的值,但是当将它们与自身和 NULL 进行比较时,相等性返回 true 和“Wat??” 打印出来了,怎么回事??

我错过了什么吗?

如果我将其重写为

if(pointer1 == NULL && pointer2 == NULL)
    cout << "This won't be printed";

它工作正常

4

2 回答 2

10

相等比较运算符 ( operator ==) 是与左侧关联的二元运算符。因此,您的条件:

pointer1 == pointer2 == NULL

变成:

(pointer1 == pointer2) == NULL,它变成:

true == NULL如果(pointer1 == pointer2); 或者

false == NULL如果(pointer1 != pointer2).

由于NULL转换为 boolean false,因此此条件的计算结果为trueif 且仅当pointer1 != pointer2

如您所见,这与:

(pointer1 == NULL && pointer2 == NULL)

它评估为true当且仅当既不是pointer1也不pointer2NULL

于 2013-03-05T12:30:42.133 回答
1

它像这样工作

编译器首先检查,pointer1 == pointer2,它是假的(整数值 0)。现在使用 NULL 检查结果 0,NULL 也为零。因此它返回true。

于 2013-03-05T12:33:28.280 回答