在这些代码中,
void main()
{
if(!NULL)
{
printf("one.");
}
else
{
printf("two");
}
}
输出是一个。这是为什么?为什么!NULL
true?
来自C标准#6.3.2p3 [添加了强调]
3带有值0 的整数常数,或类型为
void *
的表达式称为a null指针常数。 66)如果将零指针常数转换为指针类型,则保证将结果指针(称为null指针)与指向任何对象或功能的指针进行比较。....
....66)宏 null 在
<stddef.h>
(和其他标题)中定义为作为null指针常数;参见7.19。
来自C标准#6.5.3.3p5
5逻辑否定操作员的结果!如果其操作数的值与0相比不相等,则为0,如果其操作数的值比较等于0。结果具有INT类型。表达式!e等于(0 == e)。
所以,这个语句
if(!NULL)
等于
if (0==NULL)
0==NULL
被评估为 true
。因此,您正在获得输出one
。
附加:
void
的main()
返回类型不符合标准。相反,您应该使用int
作为main()
的返回类型。
null是指指的指针等效0。0在c中为false,任何其他非零值都是正值。
。因此,如果!(不是运算符)应用于null(false),则意味着!null是正确的。
因此,if条件是正确的,并且"一个"。被打印。
简而言之: -
根据 C语言标准,
non-Zero 值等于 true
零&amp; null 等效于 false
因此,(!null)等效于 true 。因此,如果块正在执行,并且一个。被打印。