为了账号安全,请及时绑定邮箱和手机立即绑定

C中的NULL总是为零吗?

C中的NULL总是为零吗?

C
侃侃无极 2019-08-02 16:55:04
C中的NULL总是为零吗?昨天我正在面试一个中级软件工程职位的人,他提到在C中,NULL并不总是零,并且他已经看到了C的实现,其中NULL不为零。我觉得这很可疑,但我想确定。谁知道他是对的?
查看完整描述

3 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

我假设你的意思是空指针。保证比较等于01 但它不必用全零位表示。2

另请参见有关空指针的comp.lang.c常见问题解答




  1. 见C99,6.3.2.3。

  2. 没有明确的主张; 但请参阅C99,7.20.3的脚注(感谢评论中的@birryree)。


查看完整回答
反对 回复 2019-08-02
?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

空指针常量始终为0. NULL宏可以由实现定义为裸0,或类似的转换表达式(void *) 0,或者某些其他零值整数表达式(因此标准中的“实现定义”语言)。

空指针可以是0以外的值。当遇到空指针常量时,它将被转换为正确的空指针值。


查看完整回答
反对 回复 2019-08-02
?
富国沪深

TA贡献1790条经验 获得超9个赞

C99标准的第6.3.2.3节说

值为0的整型常量表达式或类型为void *的表达式称为空指针常量。如果将空指针常量转换为指针类型,则保证结果指针(称为空指针)比较不等于指向任何对象或函数的指针。

§7.17也说

[...] NULL,扩展为实现定义的空指针常量[...]

NULL指针的地址可能与0不同,而它的行为与大多数情况下的相同。

(这应该与我现在没有的旧C标准相同)


查看完整回答
反对 回复 2019-08-02
  • 3 回答
  • 0 关注
  • 401 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信