自加运算符问题
今早上遇到一个问题,原始代码是:
程序代码:#include <stdio.h>
main()
{
int a=0,b=3;
a=(b++)+(b++)+(b++);
printf("a=%d\n",a);
printf("b=%d\n",b);
a=0,b=3; //变量a重新归零,b重新归3
a=(++b)+(++b)+(++b);
printf("a=%d\n",a);
printf("b=%d\n",b);
}这个代码根据分析结果应该是:
a=9
b=6
a=15
b=6
但是我用手机编译器(C4droid 用的linux下的G++编译器)运行结果为:
a=9
b=6
a=16
b=6
第二个a的值和想象的不一样,我认为可能是编译器的实现不一样,于是又用vs2013试了一下,结果:
a=9
b=6
a=18
b=6
这结果第二个a的值相差的更大
为了分析结果,我改了下代码:
程序代码:#include <stdio.h>
main()
{
int a = 0, b = 3;
a = (b++) + (b++) + (b++);
printf("a1=%d\t", a);
printf("b1=%d\n", b);
a = 0, b = 3; //变量a重新归零,b重新归3
a = (++b) + (++b) +(++b);
printf("a2=%d\t", a);
printf("b2=%d\n", b);
a = 0, b = 3; //变量a重新归零,b重新归3
a = (++b) + (++b);// +(++b);
printf("a3=%d\t", a);
printf("b3=%d\n", b);
a = 0, b = 3; //变量a重新归零,b重新归3
a = (++b);// +(++b) + (++b);
printf("a4=%d\t", a);
printf("b4=%d\n", b);
a = 0, b = 3; //变量a重新归零,b重新归3
a += (++b);
a += (++b);
a += (++b);
printf("a5=%d\t", a);
printf("b5=%d\n", b);
a = 0, b = 3; //变量a重新归零,b重新归3
a = (printf("b6_1=%d\t", ++b), b) + (printf("b6_2=%d\t", ++b), b) + (printf("b6_3=%d\t", ++b), b);
printf("a6=%d\t", a);
printf("b6=%d\n", b);
}电脑运行结果:
a1=9 b1=6
a2=18 b2=6
a3=10 b3=5
a4=4 b4=4
a5=15 b5=6
b6_1=4 b6_2=5 b6_3=6 a6=18 b6=6
我就不懂了,4+5+6怎么就等于18了,求指点






