在C中,似乎有零各个值之间的差- NULL,NUL和0.
我知道ASCII字符的'0'计算结果为48或0x30.
该NULL指针通常定义为:
#define NULL 0
Run Code Online (Sandbox Code Playgroud)
要么
#define NULL (void *)0
Run Code Online (Sandbox Code Playgroud)
另外,也有似乎评价的NUL人物.'\0'0
是否有时候这三个值不相等?
这在64位系统上也是如此吗?
在C中,NULL定义为(void *)0在C++中它是0.为什么会这样?在CI中可以理解,如果NULL不是类型转换,(void *)则编译器可能/可能不会生成警告.除此之外,有什么理由吗?
昨天我正在面试一个中级软件工程职位的人,他提到在C中,NULL并不总是零,并且他已经看到了C的实现,其中NULL不为零.我觉得这很可疑,但我想确定.谁知道他是对的?
(回复不会影响我对这位候选人的判断,我已将决定提交给我的经理.)
我正在阅读这篇博客文章,在Null指针常量和括号表达式部分下,作者参考了ISO C标准中的第6.3.2.3节和第6.5.1节,并说:
它没有说括号空指针常量是一个空指针常量.
严格来说,这意味着,这
(void*)0是一个空指针常量,但((void*)0)不是.
然后:
我敢肯定,大多数C实现根本治疗括号空指针常数作为空指针常数,并定义
NULL无论是作为0,((void*)0)或以其他的方式.
两个参考部分说:
§6.3.2.3
值为0的整型常量表达式或类型为void*的表达式称为空指针常量.
§6.5.1
带括号的表达式是主表达式.它的类型和值与未表示的表达式相同.如果未表示的表达式分别是左值,函数指示符或空表达式,则它是左值,函数指示符或void表达式.
粗体句是否与提交人声称((void*)0)不是空指针常量相矛盾?