不懂短路原则
c语言逻辑运算的问题
这个思考题
l j k分别是几呢
谢谢大家!
初始值:i=10,j=3,k=0
表达式 i==1 && (j==3 || (k=k+1))
计算顺序是:
先计算i==1,i=10,i==1不成立
&&运算时,如果&&左侧为假,右侧就不再执行,因为当&&左侧为假时,右侧不管真假,整体的运算结果都是假,所以,
当&&左侧为假时,编译器就不再执行&&右侧的运算了,所以,在这个表达式中(j==3 || (k=k+1))是不执行的
i、j、k的值不变,仍然是 i=10,j=3,k=0
表达式:i==1 && j==3 || (k=k+1)
计算顺序从做到右,i==1不成立,所以&&右侧的j==3不执行,执行k=k+1,k=1
所以,最后i=10,j=3,k=1
在表达式 i==1 && (j==3 || (k=k+1))中,&&右侧在一个()中,()中的内容看做一个整体。
在表达式i==1 && j==3 || (k=k+1)中,&&右侧没有(), 只有j==3参与 &&运算
注意两者的差别