如何比较指针地址值?
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% 确定此处的运算符优先级,但您正在进行比较,这会产生布尔结果,然后将布尔结果与其他结果进行比较。
无论哪种方式,这都是一个可怕的陈述。但显然这是导致错误结果的原因。你需要解决这个问题。
表达式
(root->left == root->right == NULL)
等同于
( (root->left == root->right) == NULL)
您要找的是:
(root->left == NULL && root->right == NULL)
(root->left == NULL && root->right == NULL)
应该可以解决问题。
代码:
//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% 确定此处的运算符优先级,但您正在进行比较,这会产生布尔结果,然后将布尔结果与其他结果进行比较。
无论哪种方式,这都是一个可怕的陈述。但显然这是导致错误结果的原因。你需要解决这个问题。
表达式
(root->left == root->right == NULL)
等同于
( (root->left == root->right) == NULL)
您要找的是:
(root->left == NULL && root->right == NULL)
(root->left == NULL && root->right == NULL)
应该可以解决问题。