如何比较指针地址值?

How to compare pointer address values?

代码:

//is leaf?
if (root->left == root->right == NULL)
{
    cout << "\n is leaf";
    cout << ", l: " << root->left << ", r: " << root->right;
    return; //is leaf
}

return秒:

is leaf, l: 004EDCD8, r: 004EDC70

这不是预期的行为。它们显然不相等且不为空,那么为什么这个语句 return 为真?

如何比较指针值?

//is leaf?
if (root->left == NULL && root->right == NULL)
{
    cout << "\n is leaf";
    cout << ", l: " << root->left << ", r: " << root->right;
    return; //is leaf
}

没有三向 == 运算符。这就像你说的那样:

if ((root->left == root->right) == NULL)

因为 root->left != root->right,那部分是错误的 (0)。现在我们有:

if (0 == NULL)

这将评估为真。

你想说的是:

if ((root->left == NULL) && (root->right == NULL))
if (root->left == root->right == NULL)

此声明的目的是什么?

我不是 100% 确定此处的运算符优先级,但您正在进行比较,这会产生布尔结果,然后将布尔结果与其他结果进行比较。

无论哪种方式,这都是一个可怕的陈述。但显然这是导致错误结果的原因。你需要解决这个问题。

看看operator precedence in C++

表达式

(root->left == root->right == NULL)

等同于

( (root->left == root->right) == NULL)

您要找的是:

(root->left == NULL && root->right == NULL)

(root->left == NULL && root->right == NULL)

应该可以解决问题。