C中的NULL总是为零吗?昨天我正在面试一个中级软件工程职位的人,他提到在C中,NULL并不总是零,并且他已经看到了C的实现,其中NULL不为零。我觉得这很可疑,但我想确定。谁知道他是对的?
3 回答
饮歌长啸
TA贡献1951条经验 获得超3个赞
我假设你的意思是空指针。保证比较等于0
。1 但它不必用全零位表示。2
另请参见有关空指针的comp.lang.c常见问题解答。
见C99,6.3.2.3。 没有明确的主张; 但请参阅C99,7.20.3的脚注(感谢评论中的@birryree)。
慕婉清6462132
TA贡献1804条经验 获得超2个赞
空指针常量始终为0. NULL
宏可以由实现定义为裸0
,或类似的转换表达式(void *) 0
,或者某些其他零值整数表达式(因此标准中的“实现定义”语言)。
空指针值可以是0以外的值。当遇到空指针常量时,它将被转换为正确的空指针值。
富国沪深
TA贡献1790条经验 获得超9个赞
C99标准的第6.3.2.3节说
值为0的整型常量表达式或类型为void *的表达式称为空指针常量。如果将空指针常量转换为指针类型,则保证结果指针(称为空指针)比较不等于指向任何对象或函数的指针。
§7.17也说
[...] NULL,扩展为实现定义的空指针常量[...]
NULL指针的地址可能与0不同,而它的行为与大多数情况下的相同。
(这应该与我现在没有的旧C标准相同)
- 3 回答
- 0 关注
- 401 浏览
添加回答
举报
0/150
提交
取消