一个关于C语言自增++运算的题目,高手进

发布时间:2024-05-21 08:19 发布:上海旅游网

问题描述:

main()
{
int x=2,y,z;
y=(++x)+(x++)+(++x);
z=(x--)+(--x)+(x--);
printf("x=%d,y=%d,z=%d\n",x,y,z);
}运行结果为什么不是x=2,y=11,z=11
我的预测是y=3+3+5=11
但是答案是x=2,y=12,z=12
请详细讲解好吗?
我用的是Turbo C/C++ for Windows集成实验环境安装文件,我很同意
“根据编译器而不同,
在你的编译器中应该是这样执行的:
y=(++x)+(x++)+(++x);
因为第二个(x++)有括号,所以就求解x++再执行括号外面的+,结果也就是3+4+5=12
在VC中就不同
回答者:jinesln - 助理 二级 3-13 14:33”的回答,但可以再详细一点吗?

问题解答:

根据编译器而不同,
在你的编译器中应该是这样执行的:
y=(++x)+(x++)+(++x);
因为第二个(x++)有括号,所以就求解x++再执行括号外面的+,结果也就是3+4+5=12
在VC中就不同

真的假的 兄弟 你在程序里运行试了么?
我感觉你的应该是对的啊

我在Vc6.0里运行的结果是x=2,y=10,z=12

我在linux下也是x=2,y=10,z=12

谭浩强的《C语言程序设计》中有个例子,大致是说不同的系统处理int i=3;printf("%d,%d,%d",i++,i++,i++)的方法不同,有的输出是3,4,5,有的输出3,3,3。我用的是Microsoft Visual C++ 6.0,按照后者输出。

对于你的问题,系统可能是将++x处理为3,后面的++x不变化,即3+4+3=10

main() { int x=2,y,z; y=(++x)+(x++)+(++x); z=(x--)+(--x)+(x--); printf("x=%d,y=%d,z=%d\n",x,y,z); }/*首先,给你说明的同时,也是我的一次再学习。0.对于每个编译平台都会对这个++运算有不同的处理.对于:Turbo C 2.0的系统下:1.说明一下,这应该属于应试教育的产物,实际的开发可要挨骂的!2.可以这样做实验(1)代码:main(){int x=2,y=0;y=(++x)+(x++);/*y=?,而以运算后,x=?*/printf("x=%d,y=%d\n",x,y);}(2)把你的代码丝毫不改的放到Dev-cpp4.9.9.2的环境下运行:你预测一下结果是什么???你肯定想不到的!看图:



*/3.我看最好的是看汇编代码了!应该能看到各个系统的差异v......4.我晕........

热点新闻