繁体   English   中英

为什么在C中if-else条件为true时传递(!NULL)?

[英]Why is passing (!NULL) in if-else condition true in C?

在这些代码行中,

void main()
{
   if(!NULL)
     {
       printf("one.");
     }
   else
     {
       printf("two");
     }
}

输出是一个。 这是为什么? 为什么!NULL真?

来自C标准#6.3.2.3p3 [强调添加]

3 值为0的整型常量表达式或类型为void *的表达式称为空指针常量 66)如果将空指针常量转换为指针类型,则保证将结果指针(称为空指针)与指向任何对象或函数的指针进行比较。

....
....

66)NULL<stddef.h> (和其他头文件)中定义为空指针常量 ; 见7.19。

来自C标准#6.5.3.3p5

5逻辑否定运算符的结果! 如果其操作数的值比较不等于0则为0;如果其操作数的值比较等于0则为1.结果的类型为int。 表达式!E等价于(0 == E)。

所以,这句话

if(!NULL)

相当于

if (0==NULL)

0==NULL被评估为true 因此,你得到输出one


额外:

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

NULL是等效于0的指针.0在C中为假,并且任何其他非零值为正。

因此,如果将!(非运算符)应用于NULL(false),则意味着!NULL为真。

所以if条件满足为真,'one'。 打印出来。

简而言之 :-

根据C编码标准,

非零值相当于TRUE
NULL相当于FALSE

因此, (!NULL)等效于TRUE 所以, 如果块正在执行而且是一个。 打印出来。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM