"pointerVariable =="的意思与"pointerVariable="不同吗?

Does "pointerVariable ==" mean something different from "pointerVariable="?

本文关键字:pointerVariable 意思      更新时间:2023-10-16

例如:

node * curr;
if(curr = NULL)

node * curr;
if(curr == NULL)

这些东西分别是什么意思?

是的,它们是不同的。

第一个示例使用赋值运算符(=)将NULL赋给curr,然后将其值作为if的条件。因为它是NULL,而NULL在条件中被认为是false,所以执行永远不会进入块。这很可能是一个bug,至少GCC和Clang会发出警告。

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

在任何C语言中,或者从C派生出来的语言中,都有一个单= is赋值和双== is相等性检验。

if ( curr = NULL )将NULL赋值给curr,然后测试是否为真或假。

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

因为很容易省略一个"="将相等性测试转换为赋值,所以我开始将常量放在左边:NULL == curr。如果我删除了一个等号,它就变成了NULL = curr,这是无效的,编译器会抛出致命错误。是的,较高的编译器检查可以捕捉到这种丢失,但是我的方法保证编译器失败。