当前位置: 代码迷 >> C语言 >> 求助:关于C语言中自增的一个问题
  详细解决方案

求助:关于C语言中自增的一个问题

热度:89   发布时间:2007-10-23 23:53:04.0
b=(++a)+(++a)+(++a);

过程
1: 先算((++a)+(++a)) 后算 +(++a)
2: ((++a)+(++a))这个表达式结果为12, 因为a自增2次 所以两个a都是6,同时影响最后1个a变成6
3: 12+ (++a) 这个时候a为6,再自增一次变为7, 12+(++a) =12+7=19 .......


----------------解决方案--------------------------------------------------------
嗯,我昨天晚上又想了想,觉得也是这样的,谢谢各位。
----------------解决方案--------------------------------------------------------

觉得18和21都好理解,但就是想不明白为什么会是19


----------------解决方案--------------------------------------------------------

学习了,

[此贴子已经被作者于2007-10-24 13:32:40编辑过]


----------------解决方案--------------------------------------------------------
以下是引用pish在2007-10-24 12:10:11的发言:

觉得18和21都好理解,但就是想不明白为什么会是19

18是怎么理解的,19很好理解啊
看11楼啊,写的很详细了
编译器不一样造成的吧

[此贴子已经被作者于2007-10-24 16:20:45编辑过]


----------------解决方案--------------------------------------------------------


依次执行,18:一次++a; a=5,二次++a; a=6,三次++a; a=7, 5+6+7 = 18
先执行第一次加,19::一次++a; a=5,二次++a; a=6,(++a)+(++a)=6+6=12,三次++a; a=7 12+7 = 19
最后执行加法,21: 一次++a; a=5,二次++a; a=6,三次++a; a=7, 7+7+7=21

那到底是根据什么来确定执行步骤呢


----------------解决方案--------------------------------------------------------

从左向右执行:由于++优先级比+高,所以执行第一个加法时,a经过两次自加,a=6,所以得到12,再自加一次变为7,则结果为12+7=19。

从右向左执行:由于++优先级比+高,经过3次自加,a=7,两个加法7+7+7=21。
晕了
----------------解决方案--------------------------------------------------------
以下是引用hczsea在2007-10-24 17:01:42的发言:


依次执行,18:一次++a; a=5,二次++a; a=6,三次++a; a=7, 5+6+7 = 18 //有你这样的编译器么?


先执行第一次加,19::一次++a; a=5,二次++a; a=6,(++a)+(++a)=6+6=12,三次++a; a=7 12+7 = 19
最后执行加法,21: 一次++a; a=5,二次++a; a=6,三次++a; a=7, 7+7+7=21

那到底是根据什么来确定执行步骤呢


----------------解决方案--------------------------------------------------------

学习了


----------------解决方案--------------------------------------------------------
看到都怕怕了,
----------------解决方案--------------------------------------------------------
  相关解决方案