早教吧 育儿知识 作业答案 考试题库 百科 知识分享

一个++i的小题目希望得到语法解释intj,i=1;j=++i+(++i);printf("%d\n",j);输出结果是6反汇编相关代码如下0040102Fmoveax,dwordptr[ebp-8]00401032addeax,100401035movdwordptr[ebp-8],eax00401038movecx,dwordptr[ebp-8]004

题目详情
一个++i的小题目希望得到语法解释
int j,i=1;
j=++i+(++i);
printf("%d\n",j);
输出结果是6
反汇编相关代码如下
0040102F mov eax,dword ptr [ebp-8]
00401032 add eax,1
00401035 mov dword ptr [ebp-8],eax
00401038 mov ecx,dword ptr [ebp-8]
0040103B add ecx,1
0040103E mov dword ptr [ebp-8],ecx
00401041 mov edx,dword ptr [ebp-8]
00401044 add edx,dword ptr [ebp-8]
00401047 mov dword ptr [ebp-4],edx
根据反汇编代码可以看出 ++i的结果放到了edx中
当他去取 (++i)表达试的时候却是取的 dword ptr [ebp-8]的值
(按理说应该取ecx的值) 但做最后加法的时候dword ptr [ebp-8]的值已经被改变了
我想得到这个题目的语法解释
我感觉应该是 用 3+2=5
输出5的
实际却是输出6
我使用的VC6编译器
我需要的语法解释
▼优质解答
答案和解析
是先计算了++i的值后再把两个加起来
第一次 ++i=2; i=2;
第二次 ++i=3; i=3;
i+i=6
例如
#include "stdio.h"
#include "iostream.h"
void main()
{
int i=1,j;
j=i+(++i);
cout