#include <stdio.h>
int main(void)
{
int j=5,q;
q=(++j)+(++j)+(++j);
printf("j=%d,q=%d",j,q);
}
用Visual C++ 6.0编译
输出j=8,q=22
用VC中的debug反汇编:
q=(++j)+(++j)+(++j);
0040102F
mov
eax,dword ptr [ebp-4]
//把j的值传到寄存器EAX,dword ptr [ebp-4]存放的是变量j
00401032
add
eax,1
//EAX加1
00401035
mov
dword ptr [ebp-4],eax
//EAX的值传到变量j,这两步实现第一个++j,此时j=6
00401038
mov
ecx,dword ptr [ebp-4]
//把j的值传到寄存器ECX
0040103B
add
ecx,1
//ECX加1
0040103E
mov
dword ptr [ebp-4],ecx
//ECX的值传到变量j,这两步实现第二个++j,此时j=7
00401041
mov
edx,dword ptr [ebp-4]
//把变量j传到EDX
00401044
add
edx,dword ptr [ebp-4]
//再加上j的值,这一步实现了第一个加号的加法运算,内存中j变量的值仍是7
00401047
mov
eax,dword ptr [ebp-4]
//把j的值传到寄存器EAX
0040104A
add
eax,1
//EAX加1
0040104D
mov
dword ptr [ebp-4],eax
//把EAX的值传送到变量j中,此时,变量j在内存中的值是8
00401050
add
edx,dword ptr [ebp-4]
//EDX加上j的值,EDX中存放的是前面的第一个加法运算的结果14,最后EDX的值为22
00401053
mov
dword ptr [ebp-8],edx
//把运算结果传到内存中变量q的地方,所以最后变量q为22