C语言的题目,执行x=(y>z)?x+2:x-2,3,2后,x=?

来源:百度知道 编辑:UC知道 时间:2024/06/16 13:14:15
初始值是XYZ=5

答案是好像是3

假设x=y=z=5的话,那么答案确实是3

系统首先执行y>z的判断,为假,0;故(y>z)?x+2:x-2将执行后半段x-2,即x=x-2,3,2。然后执行赋值操作,故有x=3,后面的逗号表达式意味着编译器将顺序执行后面的代码,并取最后一个运算式的值为表达式的最终值,故表达式的值为2,而x的值为3。

必须说明的是,这样的写法的可读性非常差,平时写代码不要这样写。逗号表达式最常用的地方是做变量声明或者函数声明的时候,如int a,b,c;或者int gcd(int a,int b);

我想这应该是2级的题目吧,出这种题目的人显然是老学究。逗号运算符会上述两种用法就够了,c语言的具体的实现应该是编译原理研究的东西。

=2,因为逗号的优先级最低。

写出这种代码的人该杀。

所以写出这种代码的人该杀,出这种题的人脑子有毛病。人不是编译器

一楼是正确的。

x,y,z开始是多少啊
“,”比等号优先级低,感谢 chunqing286
先y〉z假
再运算? :取x-2;
x=x-2,2,3;
,不参与x的运算

Y>Z 假 选择 X-2 表达式变成
X=(X-2),3,2
就是X=3,3,2
答案是3