void main() { int y=3,x=3,z=1; printf("%d%d\n",(++x,y++),z+2); } 输出的结果为什么?求详细解及思路

void main()
{
int y=3,x=3,z=1;
printf("%d%d\n",(++x,y++),z+2);
}
输出的结果为什么?求详细解及思路

33
printf("%d%d\n",(++x,y++),z+2);
第一个%d输出时,是(++x,y++)的值,里面有个逗号,逗号是输出最右边的,所以应该是输出y++;y++时,先取再加,就是先输出y,再自增1,所以第一个输出3
第二个就容易了,就是输出z+2,也就是3
温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-12-17
c语言提供一种特殊的运算符,逗号运算符,优先级别最低,它将两个及其以上的式子联接起来,从左往右逐个计算表达式,整个表达式的值为最后一个表达式的值。如:(3+5,6+8)称为逗号表达式,其求解过程先表达式1,后表达式2,整个表达式值是表达式2的值,如:(3+5,6+8)的值是14,a=(a=3*5,a*4)的值是60,而(a=3*5,a*4)的值是60,
a的值是15。
a++表示先把a的值代入函数再令a+1,++a表示先令a+1再代入函数
不用多说了吧
第2个回答  2010-08-21
输出 33
逗号表达式的值为最右边的值,所以(++x,y++)的值为y++,等于3,因为++操作在计算之后才进行。
z+2 = 1+2 = 3

所以最终的结果为33
第3个回答  2017-12-17
输出33。z+2==3,(++x,y++)是逗号表达式,只取最后一个y++,后++取值后才执行,所以两个都是3。