为什么在C中通过(!null)在C中为true



在这些代码中,

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


附加:

voidmain()返回类型不符合标准。相反,您应该使用int作为main()的返回类型。

null是指指的指针等效0。0在c中为false,任何其他非零值都是正值。

因此,如果!(不是运算符)应用于null(false),则意味着!null是正确的。

因此,if条件是正确的,并且"一个"。被打印。

简而言之: -

根据 C语言标准,

non-Zero 值等于 true
&amp; null 等效于 false

因此,(!null)等效于 true 。因此,如果块正在执行,并且一个。被打印。

相关内容

  • 没有找到相关文章

最新更新