回 帖 发 新 帖 刷新版面

主题:高手菜鸟快来讨论!!!

main()
{  int i=3,k;
   k=(i++)+(i++)+(--i);
   printf("%d",k);}

main()
{  int i=3;
   printf("%d",(i++)+(i++)+(--i));
}
这两个程序有什么不同吗???
为何输出结果不同啊?

回复列表 (共9个回复)

沙发

在我的电脑上输出结果是一样的.

板凳

不是吧!老大!!!
第一个的值是6
第二个的值是11

3 楼


计算机由右向左开始计算,
1,--i;//--i = 3,执行之后i = 2;
2, ++i;//++i = 2,执行之后i = 3;
3, ++i;//++i = 3,执行之后i = 4;
于是值为8。
感觉这个&编译器有很大关系,VC6上运行后两个结果是一样的。呵呵

4 楼

这个问题很基础我觉得非常好
第一道定义的是两个变量赋值表达式是从右至左的结合性
  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

5 楼

我怎么觉得第一个的结果是7啊 你门运行了吗

6 楼

我用免费的bc5.5 命令行,第一个11,第二个6,
我觉得vc++ 内部优化偏离c/c++标准了,很不明白,这个肯定是不一样的。vc太人性化了吧。可能。

7 楼



我用TC2.0编译的
结果1。6
    2。11
原因同四楼

8 楼

发了的帖子不想要了怎么删掉

9 楼


确实在VC上的结果是一样的,我觉得应该和DEV上的值会不一样吧,我这机子上现在没有要DevC,你自己试一试吧,这与编译器的种类有关的

我来回复

您尚未登录,请登录后再回复。点此登录或注册