为什么在C中if-else条件中传递(!NULL)为真?
在这些代码行中为什么在C中if-else条件中传递(!NULL)为真?,c,if-statement,null,C,If Statement,Null,在这些代码行中 void main() { if(!NULL) { printf("one."); } else { printf("two"); } } 输出为1。为什么呢?为什么是!NULLtrue?NULL是与0等效的指针。0在C中为假,任何其他非零值为正 因此如果!(非运算符)应用于NULL(false),这意味着!NULL为true 因此,if条件满足为真,并打印“一”。来自C标准#6.3.2.3p3[强
void main()
{
if(!NULL)
{
printf("one.");
}
else
{
printf("two");
}
}
输出为1。为什么呢?为什么是
!NULL
true?NULL是与0等效的指针。0在C中为假,任何其他非零值为正
因此如果!(非运算符)应用于NULL(false),这意味着!NULL为true
因此,if条件满足为真,并打印“一”。来自C标准#6.3.2.3p3[强调添加]
3值为0的整型常量表达式,或转换为类型void*
,称为空指针常量。66)如果将空指针常量转换为指针类型,则生成的指针称为空指针,保证与指向任何对象或函数的指针进行比较
..66)宏NULL在
(和其他标题)中定义为空指针常量;见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()
的返回类型,简而言之:-
根据C编码标准
非零值等于真
Zero和NULL等同于FALSE 因此,(!NULL)等同于TRUE。因此,如果块正在执行并且打印了一个