问题描述
我很困惑是否可以将 if(ptr == 0)
用于 if(ptr == NULL)
。我发现有很多问题和答案。他们说 1. 所有空指针比较相同。 2. 不保证空指针的所有位都设置为零。但我怀疑这能否成为问题的答案,因为...
根据C99中的6.3.2.3 p3和p4,
- 值为 0 的整数常量表达式,或这样的表达式转换为类型 void *,称为空指针常量。 55) 如果一个空指针常量被转换为一个 指针类型,结果指针称为空指针,保证比较不相等 指向任何对象或函数的指针。
- 将空指针转换为另一种指针类型会产生该类型的空指针。任何两个空指针比较相等。
0
是空指针常量,'stddef.h' 中的 NULL
是空指针常量(0
或 (void *)0
)。 0
和 (void *)0
之间的比较或空指针未定义(标准只是说任意两个空指针比较相等)。
那么在检查指针的有效性时使用 if(ptr == 0)
代替 if(ptr == NULL)
真的安全吗? (最后我想使用 if(!ptr)
并且我知道原始形式有利于可读性。)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)