| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1026 人关注过本帖
标题:为什么是这个结果啊,大家帮忙看一下!
只看楼主 加入收藏
惜缘
Rank: 1
等 级:新手上路
帖 子:32
专家分:4
注 册:2010-7-2
结帖率:100%
收藏
已结贴  问题点数:15 回复次数:11 
为什么是这个结果啊,大家帮忙看一下!
main()
{
int i=3,j=0;
j=i++*++i+i--*--i;
printf("i=%d\n",i);
printf("j=%d",j);
printf("表达式=%d\n", i++*++i+i--*--i);
}
用tubor c 2.0 运行的结果是:i=3 j=18 表达式=30
可是用VC++ 6.0运行的结果是:i=3 j=25 表达式=25
我想知道 为什么j=25和表达式=25,这两个结果我不太明白,怎么算出来的!
请大家帮忙看一下!
搜索更多相关主题的帖子: 结果 
2010-10-04 19:29
聋眼睛瞎耳朵
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:29
专家分:123
注 册:2010-9-24
收藏
得分:1 
我在VC2005里运行的结果是:3  j=18  表达式=18 根据程序也应该是这样的结果才是
2010-10-04 20:38
聋眼睛瞎耳朵
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:29
专家分:123
注 册:2010-9-24
收藏
得分:1 
我在VC2005里运行的结果是:3  j=18  表达式=18 根据程序也应该是这样的结果才是
2010-10-04 20:38
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:4 
不要写这样的表达式就行,按你预期的方式来写,不要连在一起,这并不是高深,只能算游戏(根本得不到你想要的结果,甚至在不同编译器下,结果都是不同的,因此其结果不可预期),如果你想编程的话,千万别写这样的表达式!
我们有很多“专家”就喜欢搞这些无聊的东西,来误导人!

★★★★★为人民服务★★★★★
2010-10-04 21:25
tornador
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:34
专家分:118
注 册:2010-10-4
收藏
得分:5 
这个跟编译器对如何处理具有副作用表达式的语句的方法有关了。
在VC++中处理方法是4*4+3*3。在turbo中的处理方法是3*3+3*3。
在VC++中同一个表达式中的i++不会影响到i的值,可以通过下列程序验证
void main()
{
int a=3;
int b=(a++)+(a++)+(a++);
cout<<b<<endl;
}
结果输出是9。
不同的编译器对待这种具有副作用的表达式的方法是不同的,所以在实际编程中要尽量少使用这样的语句,否则会出现难以预料的结果。
2010-10-04 21:52
zaq2008
Rank: 2
等 级:论坛游民
帖 子:23
专家分:13
注 册:2010-8-14
收藏
得分:3 
编译器实现问题
根据标准应该是30的
但在语句处理上只处理第一个自增或自减运算
2010-10-05 14:39
lscalin
Rank: 6Rank: 6
来 自:周总理故乡
等 级:侠之大者
威 望:1
帖 子:91
专家分:405
注 册:2010-5-10
收藏
得分:1 
如果一定要用到多重自增看减请一定要用上括号,不然问题多多呀,

灵感不是曹操,说来就来。
2010-10-05 14:46
tansuo
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2010-10-6
收藏
得分:0 
可能是编译系统处理输出流的顺序不一样。我觉得还是不要用自加自减比较好。
2010-10-07 22:14
longzhixuan
Rank: 1
等 级:新手上路
帖 子:10
专家分:2
注 册:2010-10-8
收藏
得分:0 
标准的计算结果应该是3,30,30,这与编辑器有管!
2010-10-08 20:34
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:0 
以下是引用cnfarer在2010-10-4 21:25:21的发言:

不要写这样的表达式就行,按你预期的方式来写,不要连在一起,这并不是高深,只能算游戏(根本得不到你想要的结果,甚至在不同编译器下,结果都是不同的,因此其结果不可预期),如果你想编程的话,千万别写这样的表达式!
我们有很多“专家”就喜欢搞这些无聊的东西,来误导人!
同意这种看法、

南国利剑
2010-10-08 21:52
快速回复:为什么是这个结果啊,大家帮忙看一下!
数据加载中...
 
   



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

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