作者:大--Man_815 | 来源:互联网 | 2023-05-28 21:14
(我引用的是ISO/IEC 9899:201x)
在这里我们看到,整数常量表达式具有整数类型:
6.6常量表达式
6.
整数常量表达式应具有整数类型,并且只能具有整数常量的操作数,枚举常量,字符常量,结果为整数常量的sizeof表达式,_Alignof表达式以及作为强制转换的直接操作数的浮点常量.整数常量表达式中的转换运算符只能将算术类型转换为整数类型,除非作为sizeof或_Alignof运算符的操作数的一部分.
这适用于任何整数类型:
6.2.6.2整数类型
5.未指定任何填充位的值.符号位为零的有符号整数类型的有效(非陷阱)对象表示是相应无符号类型的有效对象表示,并且应表示相同的值.对于任何整数类型,所有位为零的对象表示应该是该类型中零值的表示.
然后我们看到使用值为0的整数常量表达式定义空指针常量.
6.3.2.3指针
3.
值为0的整型常量表达式或类型为void*的表达式称为空指针常量.如果将空指针常量转换为指针类型,则保证将结果指针(称为空指针)与指向任何对象或函数的指针进行比较.
因此,空指针常量必须将其所有位设置为零.
但是在线和StackOverflow上有很多答案说这不是真的.
给出引用的部分,我很难相信他们.
(请使用最新标准的参考答案)
1> ouah..:
标准是否定义空指针常量以将所有位设置为零?
不,它没有.C标准的任何段落都没有规定这样的要求.
void *p = 0;
p
例如,是一个空指针,但标准不要求该对象p
必须设置所有位.
有关信息,c-faq网站提到了一些具有非零空指针表示的系统:http://c-faq.com/null/machexamp.html