经过以下语句定义,int x=1,y=2,z=3;
表达式 z+=x>y?++x:++y的值为?
结果为 6
还有书上的一句话我也不懂
你划线的那句话意思就是z+=x>y?++x:++y要按(z+=(x>y?++x:++y))的顺序进行运算
根据++x是先让x加一然后返回值,所以原式可以认为(z+=(x>y?++x:3))->(z+=(x>y?2:3))->(z+=(2>3?2:3))->(z+=3)的计算步骤进行。
注意:三目运算只会执行为真的表达式,也就是说x++并没有被执行,楼下的回复是有问题的
int x=1,y=2,z=3;
z+=x>y?++x:++y等价于 x++,y++ ; int v=z>y?x:y ; z=z+v;这三句话
x++,y++ 后,x=2,y=3, 3>y不成立,所以z>y?x:y的结果是y(也就是3)
z=z+v=3+3=6
原式应该等价于
int x=1,y=2,z=3;
if (x>y) {
z+=++x;
} else {
z+=++y;
}
很容易看出最外层的判断x>y的运算优先级最高