【发布时间】:2017-06-07 21:22:04
【问题描述】:
程序贴在下面:
#include <stdio.h>
int main(void)
{
int a, b, c, d;
printf("a = %d, b = %d, c = %d, d = %d\n", a, b, c, d);
if( (a = 4) || (b = 6) || (c = 7) || (d = 8) )
printf("a = %d, b = %d, c = %d, d = %d\n", a, b, c, d);
}
我理解第一个 printf 语句,但在第二个 if 语句中,我不明白当只有一个等号而不是两个等号时它会评估什么。
输出是:
a = 0, b = 0, c = 32767, d = -341260496
a = 4, b = 0, c = 32767, d = -341260496
所以第二个 if 语句最终是真的,但是如何呢?
我认为一个等号会为变量赋值。
【问题讨论】:
-
第一个 printf 是未定义的行为,因为你还没有初始化任何变量。
-
没有初始化任何变量。最后,只有
a被设置为4,而其他的仍然未初始化。 -
使用
==来测试是否相等。a = 4将值 4 分配给a。 -
一个等号赋值,然后返回赋值(所以第一个赋值是
true,其余的被跳过) -
只有
a被分配,因为它是短路。查看第一个||之后的任何内容是没有意义的,因此其他任务不会被执行。
标签: c if-statement logical-operators