[英]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.