当前位置: 代码迷 >> C语言 >> vc环境中i++问题...
  详细解决方案

vc环境中i++问题...

热度:117   发布时间:2007-11-17 15:50:23.0
vc环境中i++问题...
到底一个语句中可以有几个i变量?我是这个意思
比如
i=1;
j=(i++)+(++i)+(i++)
j的值是多少呢?最后i的值多少?
从右算还是从左算?
我从左算的,1+3+3?是么?还是以最后算出的i值为准?
3+3+3?
最后的i值是4?
操.实在不懂...哪位老大解释下,越详细越好.感谢
搜索更多相关的解决方案: 环境  

----------------解决方案--------------------------------------------------------
j = (i++) + (++i) + (i++)
↓ ↓ ↓
1 3 2

计算i 值的时候,
(i++)输出i 为2
(++i ) 输出i 为3
(i++) 输出i 为 4
----------------解决方案--------------------------------------------------------
最后一个括号里面的值为什么是2?
----------------解决方案--------------------------------------------------------
第一个i变成了2,在第二个括号中变成了3吧?为什么第三个是2呢?
----------------解决方案--------------------------------------------------------
提示: 作者被禁止或删除 内容自动屏蔽

坚持到底
2007-11-17 08:25:18
dousao

等 级:论坛游民
帖 子:228
专家分:58
注 册:2007-11-8
  得分:0 
是不是++i  只是得出++i的总值是3 但是算过后i的值并不加?也就是还是第一步算出的2?所以到第三还是2?
----------------解决方案--------------------------------------------------------
+ 的结合性是左结合。所以从左向右一步步算。
j = (i++) + (++i) + (i++)
↓ ↓ ↓
参与运算的值 1 3 3
运算后i的值 2 3 4

所j=7,i=4.
可是用VC编译运行后得到结果是 j=6,i=4。这是怎么搞的。


[此贴子已经被作者于2007-11-17 16:44:55编辑过]


----------------解决方案--------------------------------------------------------
你可以找《C缺陷与陷阱》看下 应该能解决你的问题;
记得上面说对其操作数求值顺序为定义
----------------解决方案--------------------------------------------------------
++i,i++呢可以这样记忆。i=2
首先若j=++i,i值是自加再传递,所以这之后i,j均为3;
再若j=i++,i值先传递再自加,所以之后i=3,j=2。
不知道这样说,明白么?
----------------解决方案--------------------------------------------------------
总之,就是遇到++在前的情况,它++优先级高于++前的运算符,++的i的值同样也是变的,而且返回加过之后的值。
----------------解决方案--------------------------------------------------------
  相关解决方案