| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1083 人关注过本帖
标题:是VC的缘故,还是谭浩强的书分析错了,为什么书上的例子执行结果跟书上不 ...
只看楼主 加入收藏
dearzhaohm
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-10-22
结帖率:0
收藏
已结贴  问题点数:20 回复次数:15 
是VC的缘故,还是谭浩强的书分析错了,为什么书上的例子执行结果跟书上不一样,求高手解答,高手解答啊。
书上是这么说的:
main()
{
    int i=8;
    printf("%d\n%d\n%d\n%d\n",++i,--i,i++,i--);
}
如按照从右至左的顺序求值。运行结果应为:
    8
    7
    7
    8
但是我在VC中执行的结果却是
    8
    7
    8
    8
求高手解答为什么啊,为什么啊,为什么啊
搜索更多相关主题的帖子: 分析 
2011-10-22 20:05
唯我独魔
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:176
专家分:782
注 册:2011-4-13
收藏
得分:3 
我也是8 7 8 8 其实吧,具体结果跟编译环境有关,不用过多在乎的,没有谁对谁错的
2011-10-22 20:19
dearzhaohm
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-10-22
收藏
得分:0 
回复 2楼 唯我独魔
按照书上的分析结果,却是应该是8,7,7,8,现在就是不知道vc是如何编译的导致结果是8,7,8,8
2011-10-22 20:22
weiwei555
Rank: 5Rank: 5
来 自:中国
等 级:职业侠客
帖 子:179
专家分:323
注 册:2011-3-4
收藏
得分:3 
对于 "++i,--i,i++,i--" 这些自加自减的运算,使用不同的编译器,结果有所不同……
2011-10-22 20:24
dearzhaohm
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-10-22
收藏
得分:0 
回复 4楼 weiwei555
请问在VC中这个题该如何分析呢?
2011-10-22 20:40
哆啦安梦
Rank: 2
来 自:哈尔滨理工大学软件
等 级:论坛游民
威 望:1
帖 子:31
专家分:49
注 册:2011-10-21
收藏
得分:3 
i++是输出i以后值增加1

Press any key to continue_
2011-10-22 20:41
ileelsai
Rank: 5Rank: 5
等 级:职业侠客
帖 子:87
专家分:303
注 册:2011-9-25
收藏
得分:3 
可能是编译器优化的缘故,不同编译器结果不一样。
参数压栈,从右到左计算
gcc      i--      i++    --i     ++i
          8        7      7       8       结果:8   7  7   8
vc      i--     i++    --i     ++i
         8       8      7       8         结果:8  7   8   8   前面i--和i++都是取值后计算,编译器优化为  i  i
比如 while(a==0)
     {...}    //不改变a的值

编译器就会优化为if(a==0){
                 while(1){    //不改变a的值
                         }
                }
编译器优化是为了提高程序运行速度。

2011-10-22 20:49
dearzhaohm
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-10-22
收藏
得分:0 
回复 7楼 ileelsai
感谢,再问一下你讲的意思是不是说前面的i--和i++,在编译时VC会同时取i的值而不是先坐i--求出i=7再去做i++
2011-10-22 21:14
ileelsai
Rank: 5Rank: 5
等 级:职业侠客
帖 子:87
专家分:303
注 册:2011-9-25
收藏
得分:0 
回复 8楼 dearzhaohm
i++ i--中的++和--可以看成多余的 i i
当然也可以是 i i (i=i+1-1)
编译器优化就是为了提速

[ 本帖最后由 ileelsai 于 2011-10-22 21:22 编辑 ]
2011-10-22 21:18
dearzhaohm
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-10-22
收藏
得分:0 
回复 9楼 ileelsai
++ ,--号在这里没有作用是把,还有就是你后来举的例子是不是说a==0在while循环中一直不变,所以系统只计算一次,以后的循环就用while(1)代替是吧
2011-10-22 21:22
快速回复:是VC的缘故,还是谭浩强的书分析错了,为什么书上的例子执行结果跟书 ...
数据加载中...
 
   



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

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