注册 登录
编程论坛 C++教室

本想在验证一下输出函数时的执行顺序,结果发现了问题!

独孤剑魔 发布于 2008-10-11 14:20, 1402 次点击
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会这样,难道是一个缺陷?或者是我懂得少不知道里面有其他含义。望知道的朋友讲讲或者大家一起讨论讨论,就当娱乐了。
12 回复
#2
blueboy820062008-10-11 14:29
显然是从右往左做的。。。
#3
独孤剑魔2008-10-11 14:30
[bo][un]blueboy82006[/un] 在 2008-10-11 14:29 的发言:[/bo]

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

,不是说这个啦,你看看输出结果就知道我问的事情了。
#4
blueboy820062008-10-11 14:32
关键区别在于本语句中 a++ 是否生效。。。。
#5
独孤剑魔2008-10-11 14:38
肯定是生效的,不然a怎么会成为5呢?
#6
gongqivictor2008-10-11 16:15
晕哦,我的编译结果是
=============
a=4 a=5 a=2 a=5
请按任意键继续. . .
=============
两个程序都一样,我用的vc2008
#7
唐天2008-10-11 16:31
哈哈
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语句中是从右往左计算。
#8
gongqivictor2008-10-11 16:33
我用Tc3.0编出来的是 4 4 2 2
由此只有一个结论,编译器的问题~
#9
qo520op2008-10-11 17:24
a=4 a=5 a=2 a=5
gcc 编译。
#10
qo520op2008-10-11 19:36
[bo][un]blueboy82006[/un] 在 2008-10-11 14:29 的发言:[/bo]

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



为什么会是从右往左的??
#11
独孤剑魔2008-10-11 19:47
[bo][un]唐天[/un] 在 2008-10-11 16:31 的发言:[/bo]

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语句中是从右往左计算。

a=5这个我肯定知道!
我是在VC6.0是运行测试的,我的推测结果与那位老兄一样,按说两种输出都是4,4,2,2。不过VC6.0的确是3,3,2,2。
#12
独孤剑魔2008-10-11 19:49
[bo][un]qo520op[/un] 在 2008-10-11 19:36 的发言:[/bo]




为什么会是从右往左的??

在没有特殊条件下,的确是按从右往左顺序执行的。
#13
daniel32008-10-11 21:21
怎么会是 3 3 2 2?
确实很奇怪啊
应该是 4 4 2 2 啊
1