(int)0 与'=='的空指针相同吗?

问题描述

我很困惑是否可以将 if(ptr == 0) 用于 if(ptr == NULL)。我发现有很多问题和答案。他们说 1. 所有空指针比较相同。 2. 不保证空指针的所有位都设置为零。但我怀疑这能否成为问题的答案,因为...

根据C99中的6.3.2.3 p3和p4,

  1. 值为 0 的整数常量表达式,或这样的表达式转换为类型 void *,称为空指针常量。 55) 如果一个空指针常量被转换为一个 指针类型,结果指针称为空指针,保证比较不相等 指向任何对象或函数的指针。
  1. 将空指针转换为另一种指针类型会产生该类型的空指针。任何两个空指针比较相等。

0 是空指针常量,'stddef.h' 中的 NULL 是空指针常量(0(void *)0)。 0(void *)0 之间的比较或空指针未定义(标准只是说任意两个空指针比较相等)。

那么在检查指针的有效性时使用 if(ptr == 0) 代替 if(ptr == NULL) 真的安全吗? (最后我想使用 if(!ptr) 并且我知道原始形式有利于可读性。)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)