关于表达式(++i)+(++i)+(++i)的值

skywgs 2005-03-12 10:53:43
如下代码
int i=2,j=2,a;
a=(++i)+(++i)+(++i);
printf("%d,%d",a,(++j)+(++j)+(++j));
在TC2.0里输出是15,12;在VC6.0里输出是13,13。不知道是什么原因?请各路高手指点,多谢了!
...全文
137 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
skywgs 2005-03-13
  • 打赏
  • 举报
回复
有哪位高手知道printf("%d",(++i)+(++i)+(++i))与a=(++i)+(++i)+(++i)里的(++i)+(++i)+(++i)的结果为什么不一样吗?
skywgs 2005-03-13
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/3388/3388814.xml?temp=.0808832
在那里看到了较好的答案,如果有人问int i=2;(++i)+(++i)+(++i)的值是多少,就应回答:不确定,与编译器相关。
takbj 2005-03-13
  • 打赏
  • 举报
回复
编译器问题
zhydong 2005-03-12
  • 打赏
  • 举报
回复
我记的好象是这样的,在TC 和MS C中是先给变量赋值,从右向左,三的i的值 都是3,而在其他版本c中,可能是从右向左依次赋值 的
skywgs 2005-03-12
  • 打赏
  • 举报
回复
谢谢,这是VC6里的过程,但在TC2里的结果为什么不一样,我以前面试是i=2,求(++i)+(++i)+(++i)的值,他说答案是15,为什么直接printf("%d",(++i)+(++i)+(++i))结果是12?
Dong 2005-03-12
  • 打赏
  • 举报
回复
a=(++i)+(++i)+(++i);
------------------------
C的是这样处理的,从右到左
1,处理右边的(++i),这时i的值为3了!然后把地址存入加法存储器!
2,处理中间的(++i),这时i的值为4了!然后执行加法指令(abx为1),但加法指想的地址都是同一个
,所以就是后来的i(4)了, 4 + 4 = 8,存入ebx存储器
3,处理左边的(++i_,这时i的值是5了!,那么和ebx的值操作加指令,把值存储在a上!
4 + 4 + 5 = 13

69,379

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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