如果在C中使用结构或指针作为if语句的参数,如何确定结果为真或假?
我一直在读别人的代码,但是人们用来判断语句是否正确的参数让我感到困惑。我见过有人将指针和结构作为参数,但我不明白如何决定逻辑语句的结果是真是假。例如:如果在C中使用结构或指针作为if语句的参数,如何确定结果为真或假?,c,pointers,if-statement,struct,C,Pointers,If Statement,Struct,我一直在读别人的代码,但是人们用来判断语句是否正确的参数让我感到困惑。我见过有人将指针和结构作为参数,但我不明白如何决定逻辑语句的结果是真是假。例如: struct Foo foo; if(foo) doSomething(); char *ch = malloc(sizeof(char)); if(num) doSomethingElse(); 如果有人编写和编译这个,如何从If语句中的逻辑语句确定结果的真假 指针可用作布尔值。空指针视为false,非空指针视为true 数字可用作布
struct Foo foo;
if(foo)
doSomething();
char *ch = malloc(sizeof(char));
if(num)
doSomethingElse();
如果有人编写和编译这个,如何从If语句中的逻辑语句确定结果的真假 指针可用作布尔值。空指针视为false,非空指针视为true 数字可用作布尔值。零值数字被视为假,而任何其他值都被视为真
结构不能用作布尔值,尽管指向结构的指针在C中是。如果表达式需要解释为真值,则将其与
0
进行比较,并根据需要应用正常转换。对于整数,这是显而易见的。对于浮点值,0
转换为0.0
。对于指针,将指针与空指针进行比较。在结构或联合的情况下,比较没有意义,并且给出了编译时错误。如果语句的控制表达式不能是聚合类型(例如,结构类型),则只能是标量类型(例如,整数类型,指针类型,…)
在c语言中,0被认为是错误的,其他一切都被认为是正确的。@SouravGhosh;没什么可说的<代码>foo未初始化。它不是合法的C。不能在标量上下文中使用结构值。这不会编译。@SouravGhosh不正确,
如果(foo)
给出编译错误。@TomKarzes和我认为foo是指针。我责怪标题/:(C)没有类。@TomKarzes:是的,我的错误。更正。
struct Foo foo;
if (foo) // not valid, foo is of a structure type
if (&foo) // valid, &foo is of a pointer type
if ((void *) 0) // valid, (void *) 0 is of a pointer type
if (42) // valid, 42 is of an integer type
if (3.14159) // valid, 3.14159 is of a floating point type