我很难理解下面代码的行为:
#include <stdio.h>
int main(void)
{
int i;
int j;
int k;
i = 7;
j = 8;
k = 9;
printf("%d\n", (i = j) || (j = k));
printf("%d, %d, %d\n", i, j, k);
return (0);
}
输出:
1
8, 8, 9
问题:
我理解 expr1 | | expr2 的值为 1 如果 expr1 或者 expr2(或者两个都有)的值为非零.
i
的值从7
增加到8
是因为i
被赋值为j
的值。但是同样的方式,为什么j
的值没有增加即使j=k
呢?我预期应该有一个
输出
1
8, 9, 9
||
是一个短路运算符,意思是如果右半部分不必要,它就不会对其进行评估,就像在这个例子中一样。 - mousetail(i = j)
表示你正在将j
的值赋给i
。你是想要赋值还是比较?如果是比较,请使用==
运算符。 - kiner_shahfread(b, 1, 500, fp) == 500 || printf("Read failed");
。 - M.M