C语言中(a||(b=c))怎么算!

#include<stdio.h>
int main()
{
    int a=1,b=3,c=5;
    printf("%d\n",(a||(b=c)));
    printf("%d %d %d",a,b,c);
}

结果为1      1 3 5

#include<stdio.h>
int main()
{
    int a=1,b=3,c=5;
    printf("%d\n",((b=c)||a));
    printf("%d %d %d",a,b,c);
}

结果为1     1 5 5

为什么两次的结果不同,而且为什么第一个程序中b不等于c.

 

分析如下: 

#include<stdio.h>
int main()
{
    int a=1,b=3,c=5;
    printf("%d\n",(a||(b=c)));

    //先判断 a||(b=c)  的前半部分 a  ,a是真值,直接返回,输出 1
    //此时 a =1 ,b =3(未改变),c =5
    

    printf("%d %d %d",a,b,c);
}

#include<stdio.h>
int main()
{
    int a=1,b=3,c=5;
    printf("%d\n",((b=c)||a));
    //先判断 (b=c)||a  的前半部分 (b=c)  ,b=c 为真,此时 a =1 ,b =5,c=5,直接返回,输出1
    //此时 a =1 ,b =5(已改变),c =5
    printf("%d %d %d",a,b,c);
}

 

(a||(b=c))  ((b=c)||a) 这两个不一样

这里涉及一个知识点就是||短路问题

(a||(b=c)) a是真所以直接就返回a的值了 后面不用执行了

(b=c)||a 计算过程 c是5赋值给b左边表达式是5是真 后面同样不计算 直接返回5

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^