如果在C中使用结构或指针作为if语句的参数,如何确定true或false结果



我一直在阅读别人的代码,但人们对if语句使用的参数真的让我感到困惑。我见过人们把指针和结构作为参数,但我不明白如何决定逻辑语句的结果是真是假。例如:

 struct Foo foo;
if(foo)
doSomething();
char *ch = malloc(sizeof(char));
if(num)
doSomethingElse();

如果有人编写和编译这个,如何从If语句中的逻辑语句中确定结果的正确性或错误性?

指针可用作布尔值。null指针被认为是false,而非null指针则被认为是true。

数字可用作布尔值。零值被认为是假,任何其他值都被认为是真。

结构不能用作布尔值,尽管指向结构的指针是.

if语句的控制表达式不能是聚合类型(例如结构类型),只能是标量类型(例如整数类型、指针类型…)。

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

在C中,如果表达式需要解释为真值,则将其与0进行比较,并根据需要应用正常转换。在整数的情况下,这是显而易见的。在浮点值的情况下,0被转换为0.0。在指针的情况下,将指针与空指针进行比较。在结构或并集的情况下,比较是没有意义的,并且会给出编译时错误。

最新更新