C程序的输出是什么,为什么?

时间:2019-07-25 18:52:10

标签: c

#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,但是如何? 请解释

3 个答案:

答案 0 :(得分:7)

Precedence。要更清楚:

if(r = p = 5 || q > 20)

相同
if(r = p = (5 || q > 20))

5是真实的,因此布尔表达式的计算结果为1,然后将其分配给r

答案 1 :(得分:1)

r分配了'or'||运算符的布尔结果。因此,r为1,因为5q > 20为真。

答案 2 :(得分:0)

当您在条件语句中使用单个'='运算符时,它会将rhs值分配给左侧标识符。如果rvalue为0,则为false,否则为true。所以在您的情况下,发生了这种情况

  

p = 5计算为p = true

     

r = p计算得出r = true

     

r = true使条件成立

因为在大多数编译器中true的整数值为1,所以r包含1 同样在OR的情况下,如果第一个条件的值为真,则不检查第二个条件