c程序的疑惑

来源:百度知道 编辑:UC知道 时间:2024/06/01 14:56:42
#include "stdio.h"
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=12,z=12
想问下为什么 y、z不是等于11?
按你的意思说就是y=x+1+(x+1)+(x+2)+1=3x+5=11 ??何来12呢?

++x,是先加1,在求值;x++则相反
实际运行顺序可能跟编译器不同而不同,
一般来讲,
y=(++x)+(x++)+(++x),有2个++x,这样就是4,这个时候y就是3个4相加,等加完了,再算x++,加一次,变成5;
z=(x--)+(--x)+(x--),类似,--x一个,所以先把x变成4,z还是12,算完了,x又变成2了

y=(++x)+(x++)+(++x);
++x 表达式的值等于X+1的值 x++表达式的值等于X的值