x=y=1;z=x++,y++,++y; z等于多少?

不是表达式的值是最后一个表达式的值吗 z为什么等于1

这不是一个表达式,是2条,
因为c语言中每个分号都代表一个表达式的结束。
上面可看成
x = y = 1;
z = x++, y++,++y;
运算符的优先级顺序问题。
赋值运算符 = 高于 ,运算符
所以执行z = x++;即z = x; x++;

表达式的值是最后一个表达式的值吗
这句话说的是逗号表达式,把(z = x++, y++, ++y)看成一个整体,整体是一个逗号表达式,整体的值是最后一个表达式的值,
你可以写printf("%d\n",(z = x++, y++, ++y));来测试逗号表达式的结果

我刚给别人写的运算符顺序表,你可以看看
[] () . -> ++(后自增) --(后自减) (type-name){}(复合常量运算符)
& * + - ~ ! sizeof ++(前自增) --(前自减)
( type-name )(强制类型转换)
* / %
+ -
<< >>
> < >= <=
!= ==
&
^
|
&&
||
? :
= *= /= %= += -= <<= >>= &= ˆ= |=
,
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-09-11
x++,在表达式完成后x才加1;所以z=x先于x++发生,所以z=1;
这里就是++在前后在后的区别了本回答被提问者采纳
第2个回答  2009-09-11
同学,你首先要弄清楚这个问题,x++和++x,
x++是先取x的值运算,再执行x+1
++x时先执行x+1,再取x的值运算

在这一串语句中z=x++才是给z赋值的语句
因为x的值为1
所以先取值运算,所以z=1,然后执行x+1,x的值变为2,但是z得值在x自加以前已经把值付给了z
所以z的值为1
第3个回答  2009-09-12
第一个是xy均为1,而第二个,由于++在x的后面,那么则是先将x的值赋给z,z=1,而后,x再自身加1,为2。若++在x的前面,那么,x则是先自身加1,而后才赋给z,那时,z才等于2.
第4个回答  2009-09-11
,的优先级很低,如果加上括号x=y=1;z=(x++,y++,++y);
那么z的值就是最后一个表达式的值,也就是3了。