如何比较指针地址值?

时间:2015-04-12 18:34:07

标签: c++ pointers binary-tree

代码:

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

返回:

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

这不是预期的行为。它们显然不相等且不为空,那么为什么这个陈述会返回真实?

如何比较指针值?

5 个答案:

答案 0 :(得分:4)

没有三路==运营商。这就像你说的那样:

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

root->left != root->right以来,该部分将为假(0)。现在我们有:

if (0 == NULL)

将评估为真。

你想说的是:

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

答案 1 :(得分:3)

看看operator precedence in C++

表达式

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

相当于

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

您正在寻找的是:

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

这句话的目的是什么?

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

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

答案 4 :(得分:0)

(root-&gt; left == NULL&amp;&amp; root-&gt; right == NULL)

应该解决问题。