"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会发出警告。
第二个使用比较运算符(==
)比较curr
和NULL
。如果curr
等于NULL
,则执行将进入块。curr
保持不变
在任何C语言中,或者从C派生出来的语言中,都有一个单= is赋值和双== is相等性检验。
if ( curr = NULL )
将NULL赋值给curr,然后测试是否为真或假。
if ( curr == NULL)
测试curr是否为NULL,并且不更改它。
因为很容易省略一个"="将相等性测试转换为赋值,所以我开始将常量放在左边:NULL == curr
。如果我删除了一个等号,它就变成了NULL = curr
,这是无效的,编译器会抛出致命错误。是的,较高的编译器检查可以捕捉到这种丢失,但是我的方法保证编译器失败。