|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
这个程序为什么q输出是22而不是21?
#include<stdio.h>
void main()
{
int i=5,j=5,p,q;
p=(i++)+(i++)+(i++);
q=(++j)+(++j)+(++j);
printf("%d,%d,%d,%d\n",p,q,i,j);
}
本帖最后由 Charles未晞 于 2018-1-23 22:29 编辑
用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
复制代码
|
|