一、表达式
表达式是变量,常数与运算符(和括号)的结合,例如:a=a+1,这里的加号"+"是一个双目运算符,有一个变量a以及一个常数1参与运算,它的返回值是a+1的值。再举个例子:a= -1, 这里的负号"-"是一个单目运算符,仅有一个常数1参与运算,它的返回值为-1,然后赋值给a
a++和++a都是表达式,不同的是它们的计算过程分为两步,对于后置自增a++,先返回表达式的值(a),再对a自增1,而前置自增++a运算与之相反。
二、自增运算符的计算过程
请思考以下代码的输出内容:
int a=1;
a=a++;
printf("%d",a);
首先,赋值运算符的优先级是最低的,所以计算过程是这样的:
1.计算表达式a++的值,a为1,所以表达式的值为1;
2.a自增1,此时a=2;
3.将表达式的值赋值给a,此时a又变为了1。所以最后的输出结果是a=1。
请再思考以下代码的输出内容:
int a=1;
a=a++ + ++a;
printf("%d",a);
1.从左往右计算,先计算前一个表达式a++的值,为1
2.a自增1,此时a=2
3.再计算后一个表达式++a的值
4.++a是前置自增,它是先自增1,此时a=3,再返回这个表达式的值,为3
5.进行赋值运算,前一个表达式+后一个表达式=1+3=4,所以输出结果为a=4
最后一题:
int a=1;
a=a++ + a++ * ++a;
printf("%d",a);
1.从左往右计算,先计算第一个表达式a++的值,1
2.a自增1,此时a=2
3.再计算第二个表达式a++的值,2
4.a自增1,此时a=3
5.计算最后一个表达式++a的值是,a自增1,此时a=4,再返回这个表达式的值,4
6.进行赋值运算,第一个表达式+第二个表达式*最后一个表达式=1+2*4=9,所以输出结果为a=9
三、总结
前置自增++a是先自增,后返回表达式的值,而后置自增a++是先返回表达式的值,再自增。