C中的NULL总是为零吗?

C中的NULL总是为零吗?

昨天我正在面试一个中级软件工程职位的人,他提到在C中,NULL并不总是零,并且他已经看到了C的实现,其中NULL不为零。我觉得这很可疑,但我想确定。谁知道他是对的?


侃侃无极
浏览 407回答 3
3回答

饮歌长啸

我假设你的意思是空指针。保证比较等于0。1 但它不必用全零位表示。2另请参见有关空指针的comp.lang.c常见问题解答。见C99,6.3.2.3。没有明确的主张; 但请参阅C99,7.20.3的脚注(感谢评论中的@birryree)。

慕婉清6462132

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

富国沪深

C99标准的第6.3.2.3节说值为0的整型常量表达式或类型为void *的表达式称为空指针常量。如果将空指针常量转换为指针类型,则保证结果指针(称为空指针)比较不等于指向任何对象或函数的指针。§7.17也说[...] NULL,扩展为实现定义的空指针常量[...]NULL指针的地址可能与0不同,而它的行为与大多数情况下的相同。(这应该与我现在没有的旧C标准相同)
打开App,查看更多内容
随时随地看视频慕课网APP