| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付学习型 ASP/PHP/ASP.NET 主机 30元/年
高端软件开发 = 年薪十万不是梦   
共有 324 人关注过本帖
标题:本想在验证一下输出函数时的执行顺序,结果发现了问题!
收藏  订阅  推荐  打印
独孤剑魔
Rank: 2
等级:注册会员
帖子:99
积分:1216
注册:2008-8-5
本想在验证一下输出函数时的执行顺序,结果发现了问题!

int a=1;
printf("a=%d a=%d a=%d a=%d\n" ,a++,++a,a++,++a); 输出结果分别是: 3,3,2,2;
最后a的结果是5,无可厚非。

同样:
int a=1;
cout<<"a="<<a++<<" a="<<++a<<" a="<<a++<<" a="<<++a<<endl;输出结果是:4,4,2,2;
最后a的结果同样是5,挺有意思的,为什么printf会这样,难道是一个缺陷?或者是我懂得少不知道里面有其他含义。望知道的朋友讲讲或者大家一起讨论讨论,就当娱乐了。
2008-10-11 14:20
blueboy82006
Rank: 12Rank: 12Rank: 12
等级:版主
帖子:1212
积分:12084
威望:16
来自:幻想世界
注册:2007-7-23

显然是从右往左做的。。。

闭关修炼中!......
2008-10-11 14:29
独孤剑魔
Rank: 2
等级:注册会员
帖子:99
积分:1216
注册:2008-8-5

引用:
blueboy82006 在 2008-10-11 14:29 的发言:

显然是从右往左做的。。。
,不是说这个啦,你看看输出结果就知道我问的事情了。
2008-10-11 14:30
blueboy82006
Rank: 12Rank: 12Rank: 12
等级:版主
帖子:1212
积分:12084
威望:16
来自:幻想世界
注册:2007-7-23

关键区别在于本语句中 a++ 是否生效。。。。

闭关修炼中!......
2008-10-11 14:32
独孤剑魔
Rank: 2
等级:注册会员
帖子:99
积分:1216
注册:2008-8-5

肯定是生效的,不然a怎么会成为5呢?
2008-10-11 14:38
gongqivictor
Rank: 1
等级:新手上路
帖子:30
积分:318
来自:武汉科大
注册:2008-9-16

晕哦,我的编译结果是
=============
a=4 a=5 a=2 a=5
请按任意键继续. . .
=============
两个程序都一样,我用的vc2008
2008-10-11 16:15
唐天
Rank: 1
等级:新手上路
帖子:6
积分:162
注册:2008-9-18
哈哈

int a=1;
printf("a=%d a=%d a=%d a=%d\n" ,a++,++a,a++,++a); 输出结果分别是: 3,3,2,2;
最后的结果应该是5吧,请注意a++,++a的区别,并且一般在printf语句中是从右往左计算。
2008-10-11 16:31
gongqivictor
Rank: 1
等级:新手上路
帖子:30
积分:318
来自:武汉科大
注册:2008-9-16

我用Tc3.0编出来的是 4 4 2 2
由此只有一个结论,编译器的问题~
2008-10-11 16:33
qo520op
Rank: 1
等级:新手上路
帖子:4
积分:148
注册:2008-9-11

a=4 a=5 a=2 a=5
gcc 编译。
2008-10-11 17:24
qo520op
Rank: 1
等级:新手上路
帖子:4
积分:148
注册:2008-9-11

引用:
blueboy82006 在 2008-10-11 14:29 的发言:

显然是从右往左做的。。。
为什么会是从右往左的??
2008-10-11 19:36
共有 323 人关注过本帖
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.093822 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved