int a=1 (++a)+(++a)+(++a)=?

liu_binq63 2008-04-10 11:53:05
int a=1
(++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。

有谁知道我的分析哪里有问题,请指教。谢谢。
...全文
140 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
liu_binq63 2008-04-11
  • 打赏
  • 举报
回复
应该是编译器对这个运算符的处理方式不一样造成的。结帖
johnx123 2008-04-11
  • 打赏
  • 举报
回复
看不懂
zmzbs123 2008-04-11
  • 打赏
  • 举报
回复
Dev-C++ Borland公司的
liu_binq63 2008-04-11
  • 打赏
  • 举报
回复
3L,你的运行环境是什么?
liu_binq63 2008-04-11
  • 打赏
  • 举报
回复
谢谢1L,我明白ms的处理方式了。

re 2L,这个只能作为实验代码,真正做项目肯定不会写这种模糊的代码。
zmzbs123 2008-04-11
  • 打赏
  • 举报
回复
我运行的结果是10.。。。
Treazy 2008-04-11
  • 打赏
  • 举报
回复
这么写,没人会请你的……

星羽 2008-04-10
  • 打赏
  • 举报
回复
这个你得看看汇编就明白了 :)


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



看到没,先++,再算和

64,691

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧