(++a)+(++a)+(++a)=?
个人感觉这个答案应该是9,但是vc2005运行的结果却是12。
我是这么分析的:
首先执行括号里的内容,第一个括号内的++a返回2,同时a自增1,得到a的值为2;
第二个括号内的++a返回3,同时a自增1,得到a的值为3;
第三个括号内的++a返回4,同时a自增1,得到a的值为4;
这是得到了三个括号内返回值的加法算式:2+3+4,得到9。
有谁知道我的分析哪里有问题,请指教。谢谢。
8 个解决方案
#1
这个你得看看汇编就明白了 :)
看到没,先++,再算和
int a=1;
00401936 mov dword ptr [a],1
int n = (++a)+(++a)+(++a);
0040193D mov eax,dword ptr [a]
00401940 add eax,1
00401943 mov dword ptr [a],eax
00401946 mov ecx,dword ptr [a]
00401949 add ecx,1
0040194C mov dword ptr [a],ecx
0040194F mov edx,dword ptr [a]
00401952 add edx,1
00401955 mov dword ptr [a],edx
00401958 mov eax,dword ptr [a]
0040195B add eax,dword ptr [a]
0040195E add eax,dword ptr [a]
00401961 mov dword ptr [n],eax
看到没,先++,再算和
#2
这么写,没人会请你的……
#3
我运行的结果是10.。。。
#4
谢谢1L,我明白ms的处理方式了。
re 2L,这个只能作为实验代码,真正做项目肯定不会写这种模糊的代码。
re 2L,这个只能作为实验代码,真正做项目肯定不会写这种模糊的代码。
#5
3L,你的运行环境是什么?
#6
Dev-C++ Borland公司的
#7
看不懂
#8
应该是编译器对这个运算符的处理方式不一样造成的。结帖
#1
这个你得看看汇编就明白了 :)
看到没,先++,再算和
int a=1;
00401936 mov dword ptr [a],1
int n = (++a)+(++a)+(++a);
0040193D mov eax,dword ptr [a]
00401940 add eax,1
00401943 mov dword ptr [a],eax
00401946 mov ecx,dword ptr [a]
00401949 add ecx,1
0040194C mov dword ptr [a],ecx
0040194F mov edx,dword ptr [a]
00401952 add edx,1
00401955 mov dword ptr [a],edx
00401958 mov eax,dword ptr [a]
0040195B add eax,dword ptr [a]
0040195E add eax,dword ptr [a]
00401961 mov dword ptr [n],eax
看到没,先++,再算和
#2
这么写,没人会请你的……
#3
我运行的结果是10.。。。
#4
谢谢1L,我明白ms的处理方式了。
re 2L,这个只能作为实验代码,真正做项目肯定不会写这种模糊的代码。
re 2L,这个只能作为实验代码,真正做项目肯定不会写这种模糊的代码。
#5
3L,你的运行环境是什么?
#6
Dev-C++ Borland公司的
#7
看不懂
#8
应该是编译器对这个运算符的处理方式不一样造成的。结帖