例如:
node * curr;
if(curr = NULL)
vs
node * curr;
if(curr == NULL)
这些东西意味着什么?
答案 0 :(得分:3)
是的,他们是不同的。
第一个示例使用赋值运算符(=
)并将NULL
分配给curr
,然后将其值用作if
的条件。由于它的NULL
和NULL
在条件方面被视为错误,因此执行将永远不会进入该区块。这很可能是一个错误,至少GCC和Clang会发出警告。
第二个使用比较运算符(==
)将curr
与NULL
进行比较。如果curr
等于NULL
,则执行将进入该块。 curr
保持不变。
答案 1 :(得分:0)
在任何C语言中,或许多从C派生的语言中,单个=是赋值,double ==是相等性测试。
if ( curr = NULL )
为curr分配NULL,然后测试是true还是false。这总是错误的。
if ( curr == NULL)
测试curr是否为NULL并且不更改它。
因为将“=”转换相等测试放到赋值中太容易了,所以我已经开始将常量放在左边:NULL == curr
。如果我丢弃等于它,它变为NULL = curr
,这是无效的,并且编译器会抛出致命错误。是的,高编译器检查可以捕获这样的丢弃,但我的方式保证编译器失败。