#include <stdio.h>
int main()
{
int p=10,q=20,r;
if(r = p = 5 || q > 20)
printf("%d",r);
else
printf("No output");
return 0;
}
输出为1,但是如何? 请解释
答案 0 :(得分:7)
Precedence。要更清楚:
if(r = p = 5 || q > 20)
与
相同if(r = p = (5 || q > 20))
5是真实的,因此布尔表达式的计算结果为1,然后将其分配给r
答案 1 :(得分:1)
r
分配了'or'||
运算符的布尔结果。因此,r
为1,因为5
或q > 20
为真。
答案 2 :(得分:0)
当您在条件语句中使用单个'='运算符时,它会将rhs值分配给左侧标识符。如果rvalue为0,则为false,否则为true。所以在您的情况下,发生了这种情况
p = 5计算为p = true
r = p计算得出r = true
r = true使条件成立
因为在大多数编译器中true的整数值为1,所以r包含1 同样在OR的情况下,如果第一个条件的值为真,则不检查第二个条件