C++中(p == NULL)与(*p == 0)是否等价?代码判断是否冗余?
关于C++代码判断的冗余性与等价性分析
核心结论
p == NULL和*p == 0完全不等价- 原代码里的判断没有冗余,反而属于必要的安全检查
具体解释
p == NULL的含义:这是判断指针p本身是否为空指针,也就是它没有指向任何有效的内存地址。如果这个条件成立,说明p是无效的,此时对它进行解引用(即*p操作)会触发未定义行为,比如程序崩溃、内存访问错误等。*p == 0的含义:这是先对指针p进行解引用,取出它指向的内存地址中存储的值,再判断这个值是否为0。但这个操作的前提是p必须是有效的非空指针,否则直接解引用空指针是非法操作。原代码的必要性:这里用到了逻辑或
||的短路求值特性——如果p == NULL为真,就不会执行后面的*p == 0,刚好避免了解引用空指针的风险。要是去掉p == NULL的判断,直接写if (*p == 0),当p为空时程序必然会出现异常。所以这个判断不仅没有冗余,反而是保障代码安全的关键部分。
内容的提问来源于stack exchange,提问作者user3443063
相关产品推荐
相关产品推荐

