初始化`int`类型变量`a`、`b`、`c`都为`2`,那么经过以下运算之:
a = a+a++;
b = b+++b;
c = ++c+c;
a = a+a++;
b = b+++b;
c = ++c+c;
三个的值分别为多少?
答案:4;5;6
解析:
关于自增`++`的解释:
`a++`和`++a`,`++a`是先自增,然后进行其他运算,而`a++`是`a`先进行其他运算,然后自增。注意`a++`和`++a`运算对象都是左操作数,使可变左值加`1`。
在同一表达式中,语义分析是按照顺序进行,并将变量值作为操作数,以值形式缓存起来。
那么
```
a = a+a++; //a值为2,那么第一个操作数值为2;a++中的a会与左操作数2进行+运算,结果是4;a++自增1,a值为3;4又重新赋值给a,a值为4。
b = b+++b; //b++或++b两种。第一种b++,b值为2,b++没有左操作数;右操作数缓存为2;b++自增1,b值为3;先进行+运算,结果为5;第二种,++b,b值为2,那么第一个操作数值为2;右侧b先自增加1,右侧操作数值为3,然后与左操作数2进行+运算,b结果是5。
c = ++c+c; //因为++操作对象必须是变量,所以(++c)+c。++c之后,第一个操作数为3,c值为3,第二个操作数也为3;所以c值为6;
```
注:这道题会涉及到寄存器和汇编语言,使用VS本地调试的时候,在Debug调试窗