主题:高手菜鸟快来讨论!!!
wubiao
[专家分:70] 发布于 2007-03-20 21:48:00
main()
{ int i=3,k;
k=(i++)+(i++)+(--i);
printf("%d",k);}
和
main()
{ int i=3;
printf("%d",(i++)+(i++)+(--i));
}
这两个程序有什么不同吗???
为何输出结果不同啊?
回复列表 (共9个回复)
沙发
tanchuhan [专家分:15140] 发布于 2007-03-20 22:54:00
在我的电脑上输出结果是一样的.
板凳
wubiao [专家分:70] 发布于 2007-03-20 23:16:00
不是吧!老大!!!
第一个的值是6
第二个的值是11
3 楼
gqhonesty [专家分:2920] 发布于 2007-03-21 16:53:00
计算机由右向左开始计算,
1,--i;//--i = 3,执行之后i = 2;
2, ++i;//++i = 2,执行之后i = 3;
3, ++i;//++i = 3,执行之后i = 4;
于是值为8。
感觉这个&编译器有很大关系,VC6上运行后两个结果是一样的。呵呵
4 楼
lovetangxuan [专家分:0] 发布于 2007-04-11 18:23:00
这个问题很基础我觉得非常好
第一道定义的是两个变量赋值表达式是从右至左的结合性
k=(i++)+(i++)+(--i)
--i=2
i++是先用在加 所以是2
前面一个一样 所以是2
2+2+2=6
第二个更容易了
第一个i++先用在加所以是3 i=4
第二个i++先用在加所以是4 i=5
第三个--i先减在用所以是4 i=4
结果是3+4+4=11
6 楼
233355750 [专家分:60] 发布于 2007-04-13 19:15:00
我用免费的bc5.5 命令行,第一个11,第二个6,
我觉得vc++ 内部优化偏离c/c++标准了,很不明白,这个肯定是不一样的。vc太人性化了吧。可能。
7 楼
lgsun [专家分:60] 发布于 2007-04-13 20:42:00
我用TC2.0编译的
结果1。6
2。11
原因同四楼
8 楼
569903289 [专家分:10] 发布于 2007-04-24 11:27:00
发了的帖子不想要了怎么删掉
9 楼
569903289 [专家分:10] 发布于 2007-04-24 11:29:00
确实在VC上的结果是一样的,我觉得应该和DEV上的值会不一样吧,我这机子上现在没有要DevC,你自己试一试吧,这与编译器的种类有关的
我来回复