#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
不知道你这个问题是否已经解决, 如果还没有解决的话: