在C中有一个顺序点的概念,也就是在 “;”或"一个判断条件"等结束后所有的运算都结束,包括++ --,所以
y=2+(x+=x++,x+8,++x);由于(x+=x++,x+8,++x)是个逗号表达式所以x+=x++在进入第二个表达式x+8也就是第一个顺序点“,”前结束全部运算
顾x进入x+8时x=11,第二个顺序点","前x没有被赋予新值直接进入第三个表达式++x 由于++x意思是先运算赋新值所以x=12到此逗号表达式取最后一个值所以y=2+12=14 要注意的是在y=2+(x+=x++,x+8,++x);如果是y=2+(x+=x++,x+8,x++);那么x++是后置运算就变成y=2+11=13原因是在逗号表达式中最后一个表达式后面没有顺序点 由于x++最近的顺序点是“;”且代表整个表达式y=2+(x+=x++,x+8,x++)在“;”前运算完后x++再自增1.
所以y=2+(x+=x++);结束";"前的全部运算后x再自增1,y就是12啦
刚初学 你可以试着分别运行 y=2+(x++);
y=(x++,x++);
y=2+(x++,x++,x++); 就明白了