在C语言中,在if语句';什么情况?

在C语言中,在if语句';什么情况?,c,C,当我使用if语句时,我可以使用比较(=)运算符和值(如整数、字符等)得到true或false。请给我一个完整的值列表(请同时提及它们产生的值,true或false),这些值可以在if语句中使用。非常简单 0为False 编辑建议人 这包括所有形式的0(0,'\0',NULL,0.0,*”,等等)。除了'0'和“0”,这是正确的,因为它们实际上不是0 在C语言中,任何其他值都被视为True=0是真的。 0是错误的 空指针(=0)为false这会导致许多简化,有时会使C语言语句变得不易理解。 即

当我使用if语句时,我可以使用比较(=)运算符和值(如整数、字符等)得到true或false。请给我一个完整的值列表(请同时提及它们产生的值,true或false),这些值可以在if语句中使用。

非常简单


0
False

编辑建议人


这包括所有形式的
0
0
'\0'
NULL
0.0
*”
,等等)。除了
'0'
“0”
,这是正确的,因为它们实际上不是
0



在C语言中,任何其他值都被视为
True

=0是真的。 0是错误的

空指针(=0)为false这会导致许多简化,有时会使C语言语句变得不易理解。 即

在上面的代码中,指针检查
如果(p!=NULL)
已简化。
这一点,即使不是严格正确的,也适用于几乎所有的C版本,ansi之前的C90将null指针等同于表达式中的null值,而C99和C11明确指出(第6.3.2.3段指针,第3点):

值为0的整型常量表达式或此类表达式 转换为void*类型称为空指针常量。如果为空 指针常量转换为指针类型,结果为 指针,称为空指针,保证与 指向任何对象或函数的指针


任何东西都可以在
if
中使用,就像这样
if(value)
。值可以是任何类型。
如果(a==b)使用
时需要小心。在这种情况下,a和b应该兼容,否则,它可能会给出编译时错误。您肯定需要注意运行时兼容性。

如前所述,0为false,其他任何内容均为true。简短示例:

int a = 0, b = 1, c = 256;

if(a) printf("a is true \n");
else  printf("a is false \n");

if(b) printf("b is true \n");
else  printf("b is false \n");

if(c) printf("c is true \n");
else  printf("c is false \n");
产出将是:

a is false
b is true 
c is true

^这个。本质上,
if(x)
总是递归地等价于
if((x)!=0)
,所以任何与
0
(无论是数字还是指针)不相等的比较都是真的。@Iwillnotexistidnotexist是,完全正确。感谢您的评论。空指针与宏
null
不同。并且它不一定具有值
0
。但它比较等于和空指针常量或任何其他相同类型的空指针。这包括
0
的所有形式(0、\0、、空、0.0、*”,等等)。除了“0”和“0”,它们都是真的,因为它们实际上不是0。
a is false
b is true 
c is true