问:为什么b没有赋值的时候运算以后等于0;而初始化后等于2?

img

img

img

a=(s=c1==c2) || (b=c3>c4); t=c3>c4;等价于:

(1)s=c1==c2; //先计算c1==c2,c1和c2都等于2,所以c1==c2成立,结果为真,所以s=1
(2)a=s=1 ,所以 ||的左侧是1,也就是真
(3)|| 运算时,如果左侧为真,右侧就不再计算了,所以b=c3>c4这里不再执行
(如果上面初始化了b=2,那么b的值仍然是2,如果b没有初始化,b的值就是一个不确定的值,可能是0,也可能是别的值,你这里b未初始化的时候,b的值是0)

(4)t=c3>c4; //先判断c3>c4,c3和c4都等于2,所以不成立,结果为假,所以t=0

||运算当前面为true时后面的不在执行,所以b永远都是原始值,没有手动添加初始化时,b的初始值是默认初始值

这里的b赋值是走不到的
注意看:
s = c1 == c2 所以这里的s为真
而且a = s || b赋值操作
这里的s为真 所以||后面的不执行 这就是把后面的语句断路了
所以b是啥输出就是啥 0只是他的默认值

这个a=(s=c1==c2)||(b=c3>c4)
由于c1==c2条件成立,所以s=true也就是s=1
由于a=(s=c1==c2)||(b=c3>c4)只要一个表达式true就返回true,||表示第一个是true就不计算后边的表达式,第一个是false才会计算后边的b=c3>c4
所以b是申明变量的默认值