当前位置: 代码迷 >> C语言 >> tc2.0上几个++,--结合问题(相信看了之后你会outbreak的)
  详细解决方案

tc2.0上几个++,--结合问题(相信看了之后你会outbreak的)

热度:60   发布时间:2007-07-26 10:26:41.0
以下是引用zrgong在2007-7-25 20:15:40的发言:

对于printf函数中是严格按照从左到右,一个括号一个括号计算的

果然是这样。
只是不知道为什么……


----------------解决方案--------------------------------------------------------
如果(i++)+(i++),依然先++,但是因为是后缀,所以先取值,最后才++,故先+,结果为2,然后i变成3。


10楼的 你能说清楚点吗?
后缀式的 应该是先运算后自增啊
这些题 我也搞不明白
----------------解决方案--------------------------------------------------------
请问8楼的
(原因:编译顺序不同,TC编译是从右到左,对于i++;++i的编译是这样的:
如:i=5
p=(i++)+(i++)+(i++);就是i在赋值完成后再自加,所以p=5+5+5=15;
q=(++i)+(++i)+(++i);是i在赋值之前就自加q=8+8+8=24。)

为什么 q=(++i)+(++i)+(++i);中的q都变成了8
我个人认为是这样 第一个++i i应该自增为6
第二个++i i应该自增为7
第三个++i i应该自增为8
所以 q=6+7+8=21
请问下 我是错在那里了 谢谢指出啊
----------------解决方案--------------------------------------------------------
用这么多时间想这些没用的细节干嘛啊...跟本就是浪费时间
----------------解决方案--------------------------------------------------------
不,补充一句,考试有用..*.*
----------------解决方案--------------------------------------------------------
你写出这样的代码要被你的伙伴抽的。在不同编译器上都可能有不一样的结果,你觉得有意思吗?
----------------解决方案--------------------------------------------------------
呵呵  我就是要考试呀~~麻烦你指导下  先谢了
----------------解决方案--------------------------------------------------------
想当年就是因为2个这样的题目,我被我老师阴了。从学好C到现在,实际中从来没用到过,既然是考试,你就这样理解:
q=(++i)+(++i)+(++i)
<=>1, ++i;i-->6
2, ++i;i-->7
4, ++i; i-->8
5, q=i+i+i;-->q= 8+8+8=24
这就是编译器处理的分解过程,没有什么原因,也没有研究的必要,当时做编译器的人就是这么处理语言的。

规则是人定的,至于当时为什么这么定,也没必要去研究。

你不会想考100分吧,不要这样,给老师留点面子
----------------解决方案--------------------------------------------------------
好难懂啊
----------------解决方案--------------------------------------------------------

对于以上各楼所说的,由于编译器不同结果也不对.我以下所说的主要是VC6.0版说的,因为我用这个比较多.TC以前记得,好久没用,忘记了.今天先大概说下编译的原理.
如"
#include (stdio.h)
main ( )
int i=5;
int j;
j=(++i)+(++i)+(++i);
printf("%d",j)
结果应24.
原因是为这样的从左往右说:第一个(++i)结果为6,第二个(++i)结果为8,第三个结果也为(++i)也为10.所以式子结果为24.这是从编译原理方面解释的.
好比i=3;也是以上式子结果将为3+5+7=15.大家可以试下,原理就是这样的,不知道小弟记错了没,如果有错误请原谅,今天下班回家查下.由于现在在上班没多的时间来说明.


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