You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中(p == NULL)与(*p == 0)是否等价?代码判断是否冗余?

关于C++代码判断的冗余性与等价性分析

核心结论

  • p == NULL 和 *p == 0 完全不等价
  • 原代码里的判断没有冗余,反而属于必要的安全检查

具体解释

  1. p == NULL 的含义:这是判断指针p本身是否为空指针,也就是它没有指向任何有效的内存地址。如果这个条件成立,说明p是无效的,此时对它进行解引用(即*p操作)会触发未定义行为,比如程序崩溃、内存访问错误等。

  2. *p == 0 的含义:这是先对指针p进行解引用,取出它指向的内存地址中存储的值,再判断这个值是否为0。但这个操作的前提是p必须是有效的非空指针,否则直接解引用空指针是非法操作。

  3. 原代码的必要性:这里用到了逻辑或||的短路求值特性——如果p == NULL为真,就不会执行后面的*p == 0,刚好避免了解引用空指针的风险。要是去掉p == NULL的判断,直接写if (*p == 0),当p为空时程序必然会出现异常。所以这个判断不仅没有冗余,反而是保障代码安全的关键部分。

内容的提问来源于stack exchange,提问作者user3443063

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 23:42:01