int x=10,y; y=(x++)+(--x); printf("%d,%d",x,y); C语言运行结果 是10,18;18怎么解释???

坐等详解

这种题不做也罢。
勉强分析一下:
y=(x++)+(--x);

等号右边的先运算,即 先运算 (x++)+(--x); 从左向右顺序运算
x++ 意思是先用x 再x=x+1 ,注意这里是用x而不是用 10这个值 ,因此,到此时,x值还是10
--x意思是先操作 x=x-1,再用x , 此时,x=x-1后,x=9
计算 x+x = 9+9=18
别忘了,前面x++,只用了x, 这时经进行x=x+1=10了

因此,结果会是 x=10 y=18

这种写法与具体的编译器还有关系,实际应用没有人会这样写代码的。纯粹是学术YY,所以,意义不大。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-03-23
是不是预处理的时候,--x使得x变成了9,接着在y=(x++)+(--x)的时候,就变成了9+9=18???估计是这么回事。。。可以一步步debug试试看~~~
第2个回答  2013-03-23
这个是undefined behavior,具体实现是未定义的,一般来说这段代码就是错的。
第3个回答  2013-03-23
应该19吧。。。怎么来18?追问

我认为也是19,但是运行确实是18

追答

那就不管它了。。。

第4个回答  2013-03-23
布吉岛。。。
相似回答