当前位置: 代码迷 >> C语言 >> [讨论]不同情况下的++结果问题
  详细解决方案

[讨论]不同情况下的++结果问题

热度:96   发布时间:2007-02-09 22:42:33.0
[讨论]不同情况下的++结果问题

在不同的编译其中,i++和++i有着不同的解释,可是为什么在同一个编译器里,利用不同的语句会有不同的解释呢?
(由于我在整理的时候数据有些乱,所以可能一些结果会有问题,但是只要大家明白我的意思就可以了.)
(以下,左边均为第一中情况,右边为相应的第二中情况):

注意:有我希望易于比较,所以分成两边来写,可是好象在排版上有些问题,所以建议大家把下面的内容复制到记事本里,然后把记事本最大化,这样比较清楚!!!!!!!

1.在VC++6.0里:(用c++语言)
一:
#include <iostream.h> #include <iostream.h>
void main() void main()
{ {
int i=3,count; int i=3;

count=(i++)+(i++)+(i++); ----------------------> cout<<(i++)+(i++)+(i++)<<endl;
cout<<count<<endl; cout<<i<<endl;
cout<<i<<endl; }
}

这时:i=6;count=9 这时:i=6; (i++)+(i++)+(i++)=9
"左边的结果和右边的相等"

二:
#include <iostream.h> #include <iostream.h>
void main() void main()
{ {
int i=3,count; int i=3;

count=(++i)+(++i)+(++i); ----------------------> cout<<(++i)+(++i)+(++i)<<endl;
cout<<count<<endl; cout<<i<<endl;
cout<<i<<endl; }
}

这时:i=6;count=16 这时:i=6; (++i)+(++i)+(++i)=25
"现在注意:左边的结果和右边的不一样了"

2.在TC2.0中:这种情况依然(用C语言)
一:
#include <stdio.h> #include <stdio.h>
void main() void main()
{ {
int i=3,count; int i=3;

count=(i++)+(i++)+(i++); -----------------------------> printf("%d\n",(i++)+(i++)+(i++));
printf("%d\n",count); printf("%d\n",i);
printf("%d\n",i); }
}

这时:i=6; count=9 这时:i=6; (i++)+(i++)+(i++)=12
"这是候左右就不同了!!"


二:
#include <stdio.h> #include <stdio.h>
void main() void main()
{ {
int i=3,count; int i=3;

count=(++i)+(++i)+(++i); -----------------------------> printf("%d\n",(++i)+(++i)+(++i));
printf("%d\n",count); printf("%d\n",i);
printf("%d\n",i); }
}

这时: i=6; count=18 这时:i=6; (++i)+(++i)+(++i)=15
"这时候两边也不一样"

3.在Jdk6中:(用Java语言)
由于好奇心,我把相同的概念拿到Java的编译器Jdk6中调试.
不过和VC++6.0和TC2.0不同,在两中情况下,输出结果均为:i=6; (i++)+(i++)+(i++)=12; (++i)+(++i)+(++i)=15

我想:在VC++6.0和TC2.0下,按道理来说两中情况结果应该是一样的,因为这两种情况只是用不同的语句完成相同的效果,可是他们的结果为什么不一样????

对于以上的论述,希望大家可以谈出自己的观点!!!!

[此贴子已经被作者于2007-2-9 22:44:12编辑过]

搜索更多相关的解决方案: 结果  

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

我觉得处理++i是这样的:
count=(++i)+(++i)+(++i)是这样执行的
1.count=(++i)+(++i)+(++i)
2.count=(i)+(i)+(i);
每次++i是后面变过的i值跟着变..
printf("%d\n",(++i)+(++i)+(++i))是逐步执行的
1.printf("%d\n",i+(++i)+(++i));
2.printf("%d\n",i+i+(++i));
printf("%d\n",i+i+i);
每次++i是后面变过的i值不跟着变..
说的不太对,请多指点


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

说的挺有道理,可是按照你的理论,第一个就解释不了,而且也不能解释为什么左右两边用不同的语句为什么结果不同


----------------解决方案--------------------------------------------------------
printf()函数对里面的参数处理是固定的

----------------解决方案--------------------------------------------------------
终于明白了TC里面的运行结果.
第一种情况:count=(++i)+(++i)+(++i),这里面的3个(++i)其实是同一个变量,也就是说每个(++i)相当于自增3次,原来i为3,现在i就为6,所以count=6+6+6=18
第二中情况:printf("%d\n",(++i)+(++i)+(++i)),这时和上面的运算步骤不同,上面是将后面的(++i)算完后赋值给count,而这里的步骤是逐个求(++i)的值,也就是说(++i)+(++i)+(++i)=4+5+6=15,而此时的i值因为每次自增1所以就为6
(i++)的情况类似.
其他的两种语言还没弄明白,不过可能也和这种原因相关!
----------------解决方案--------------------------------------------------------
  相关解决方案