问题来源:一位学生问 int i=4 ; int j=++i + ++i + ++i ; 执行后j为多少?为什么?
答案是 19 !!!!(VC6.0环境)
以下是机器码的汇编格式
/*
3: int i = 4 ;
4: int j = ++i + ++i + ++i ;
执行分析:dword ptr [ebp-4] 保存的就是 i dx 是 j
---- 计算第一个 ++i 保存
0040102F mov eax,dword ptr [ebp-4] //eax = dword ptr [ebp-4] 即 eax = i
00401032 add eax,1 //eax = eax + 1
00401035 mov dword ptr [ebp-4],eax //dword ptr [ebp-4]= eax 即 i = eax
========此时 i = 5 =====
=--- 计算第二个 ++i 保存
00401038 mov ecx,dword ptr [ebp-4]
0040103B add ecx,1
0040103E mov dword ptr [ebp-4],ecx
========此时 i = 6 =====
--------- 计算第一个 + 号
00401041 mov edx,dword ptr [ebp-4]
00401044 add edx,dword ptr [ebp-4]
========此时 edx = 12 =====
=--- 计算第三个 ++i 保存
00401047 mov eax,dword ptr [ebp-4]
0040104A add eax,1
0040104D mov dword ptr [ebp-4],eax
========此时 i = 7 =====
--------- 计算第二个 + 号
00401050 add edx,dword ptr [ebp-4]
00401053 mov dword ptr [ebp-8],edx
=========== 结果是19 =================
*/