c语言中的自加自减

发布时间:2024-05-10 10:27 发布:上海旅游网

问题描述:

int a=0;
printf("a1=%d,a2=%d,a3=%d",a++,a++,a++);
结果为a1=2,a2=1,a3=0;
那一个运算中如:y=a+++a+++a++;
结果中,三个a++从左到右的值各该是什么;
还有
{int a=1;
b=a+++a--;}b的值为什么是2?

问题解答:

1. int a=0;
printf("a1=%d,a2=%d,a3=%d",a++,a++,a++);
运行结果:a1=2,a2=1,a3=0
原因: printf( )参数的求值顺序为 从右---->左计算
a++,a++,a++先算右a++,在算左侧a++

2. int a=0;
y=a+++a+++a++; ------> y=(a++)+(a++)+(a++);
由于++为后置自加运算,先处理表达式,再处理++
所以,y=0+0+0=0,再进行三次++,a 的值为3

3. int a=1;
b=a+++a--;
其中:b=a+++a--;---->b=(a++)+(a--);
由于++和--为后置运算,先处理表达式,再处理++和--
所以,b=a+a=2,然后再进行++和--,a 的值为1

对于你第一个问题我可以给你回答,因为在printf中运算是自右到左的,即第一个a++先将a的值赋给a3,即a3=0,然后a加1,a的值变为1,再将此时a的值2赋给a2,即a2=1,然后a的值再加1,变为2,将此时a的值3赋给a1,即a3=2,a值再自加1,但要注意了,在结果输出后,a的值为3,不是为2.
对于你第二个和第三个问题,就不是我能解决的,我也不知道答案,因为在不同的编译系统中,它的运算是不一样的.如果你是学生,你可以去问问你的老师,反正我老师是这样说的.

这要看你是用的什么编译器啦,各种编译器编译出来的效果都不一样。

热点新闻