Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果在C中使用结构或指针作为if语句的参数,如何确定结果为真或假?_C_Pointers_If Statement_Struct - Fatal编程技术网

如果在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