if语句中的赋值语句如何作为条件?

时间:2016-05-11 14:51:37

标签: c if-statement boolean assignment-operator

returns "Call to a member function getQuery() on null"

你能告诉我为什么它是一个赋值而不是括号中的布尔表达式吗?在什么情况下,这项任务可以被视为“真实”或“虚假”?

4 个答案:

答案 0 :(得分:2)

引用C11,章节§6.5.16,分配运算符强调我的

  

赋值运算符将值存储在左操作数指定的对象中。 <强>一种   赋值表达式具有赋值后的左操作数的值, 111)但不是   左值。

因此,首先进行赋值,然后,已分配的值将用作if中的条件语句。

所以,在

的情况下
if (p = 0 )

将评估为FALSE和

if (p = 5)

将为TRUE。

答案 1 :(得分:0)

C认为任何非零都是true,而任何0都是假的。

此作业的值等于它指定给vnd的值,在本例中为struct diam_vnd_t *。 if语句在分配后检查vnd是否为NULL

这相当于:

vnd = (struct diam_vnd_t *)g_hash_table_lookup(vendors,vend);
if (vnd) {...}

答案 2 :(得分:0)

“等于”的逻辑运算符为==

当您说vnd = (struct...时,您要将=之后的所有内容分配给变量vnd。如果您想要真或假,则需要使用==

答案 3 :(得分:0)

总是使用一个等号完成分配。 =

int i;
i = 0; //assignment

这将0赋给一个名为i的整数。

你的if语句也会发生同样的事情。是否在if语句中是无关紧要的。

(vnd = (struct diam_vnd_t *)g_hash_table_lookup(vendors,vend))

要执行布尔表达式,您需要使用==

(vnd == (struct diam_vnd_t *)g_hash_table_lookup(vendors,vend))

根据2项

的比较,这将返回true或false