| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 439 人关注过本帖
标题:[讨论]不同情况下的++结果问题
只看楼主 加入收藏
genie2014
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2006-6-21
收藏
 问题点数:0 回复次数:4 
[讨论]不同情况下的++结果问题

在不同的编译其中,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编辑过]

搜索更多相关主题的帖子: 结果 
2007-02-09 22:42
没牙的狼
Rank: 1
等 级:新手上路
帖 子:49
专家分:0
注 册:2006-4-23
收藏
得分:0 

我觉得处理++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值不跟着变..
说的不太对,请多指点


2007-02-09 23:16
genie2014
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2006-6-21
收藏
得分:0 

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


2007-02-09 23:43
没牙的狼
Rank: 1
等 级:新手上路
帖 子:49
专家分:0
注 册:2006-4-23
收藏
得分:0 
printf()函数对里面的参数处理是固定的

2007-02-09 23:51
genie2014
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2006-6-21
收藏
得分:0 
终于明白了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++)的情况类似.
其他的两种语言还没弄明白,不过可能也和这种原因相关!

2007-02-10 12:26
快速回复:[讨论]不同情况下的++结果问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.055843 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved