VC中的(++j)+(++j)+(++j)与(++j)+((++j)+(++j))
来源:百度知道 编辑:UC知道 时间:2024/05/14 18:01:18
p=(++j)+(++j)+(++j);
q=(++j)+((++j)+(++j));
结果是p=22,q=24。
哪位高手给解释一下,最好详细些。
如果是( (++j) + (++j) ) + (++j)的话结果也是22,有点晕了!!!
这是我用VC6 生成的汇编代码 可以很清楚看出处理过程 第二个表达式你可以自己分析
; 12 : p=(++j)+(++j)+(++j);
mov eax, DWORD PTR _j$[ebp]
add eax, 1
mov DWORD PTR _j$[ebp], eax //这时j变为6
mov ecx, DWORD PTR _j$[ebp]
add ecx, 1
mov DWORD PTR _j$[ebp], ecx //这时j变为7
mov edx, DWORD PTR _j$[ebp]
add edx, DWORD PTR _j$[ebp] //计算j+j=14
mov eax, DWORD PTR _j$[ebp] //这时j++
add eax, 1
mov DWORD PTR _j$[ebp], eax //这时j变为8
add edx, DWORD PTR _j$[ebp]
mov DWORD PTR _p$[ebp], edx //计算14+8=22 所以结果为22
; 13 : j=5;
mov DWORD PTR _j$[ebp], 5
; 14 : q=(++j)+((++j)+(++j));
mov ecx, DWORD PTR _j$[ebp]
add ecx, 1
mov DWORD PTR _j$[ebp], ecx
mov edx, DWORD PTR _j$[ebp]
add edx, 1
mov DWORD PTR _j$[ebp], edx
mov eax, DWORD PTR _j$[ebp]
add eax, 1
mov DWORD PTR _j$[ebp], eax
mov ecx, DWORD PTR _j$[ebp]
add ecx, DWORD PTR _j$[ebp]
mov