“pointerVariable ==”是否意味着与“pointerVariable =”不同?

时间:2014-05-31 01:44:34

标签: c++

例如:

node * curr;
if(curr = NULL)

vs

node * curr;
if(curr == NULL)

这些东西意味着什么?

2 个答案:

答案 0 :(得分:3)

是的,他们是不同的。

第一个示例使用赋值运算符(=)并将NULL分配给curr,然后将其值用作if的条件。由于它的NULLNULL在条件方面被视为错误,因此执行将永远不会进入该区块。这很可能是一个错误,至少GCC和Clang会发出警告。

第二个使用比较运算符(==)将currNULL进行比较。如果curr等于NULL,则执行将进入该块。 curr保持不变。

答案 1 :(得分:0)

在任何C语言中,或许多从C派生的语言中,单个=是赋值,double ==是相等性测试。

if ( curr = NULL )为curr分配NULL,然后测试是true还是false。这总是错误的。

if ( curr == NULL)测试curr是否为NULL并且不更改它。

因为将“=”转换相等测试放到赋值中太容易了,所以我已经开始将常量放在左边:NULL == curr。如果我丢弃等于它,它变为NULL = curr,这是无效的,并且编译器会抛出致命错误。是的,高编译器检查可以捕获这样的丢弃,但我的方式保证编译器失败。