2933057881 发表于 2013-3-28 14:40:34

程序 问题

#include<stdio.h>
void main()
{
int i=5,j=5,p,q;
p=(i++)+(i++)+(i++);
q=(++j)+(++j)+(++j);
printf("%d,%d,%d,%d\n",p,q,i,j);
}


为什么运行后q是22不应该是21吗 ????

夕阳游子 发表于 2013-3-28 17:11:00

我的C++运行不了结果

梅沙小子 发表于 2013-3-28 17:52:46

q=(++j)+(++j)+(++j)
中分三步计算
1:j先自增1 j=7
2:先计算后两个(++j)+(++j)=14
将第一个(++j)与后两个相加前先要自增1 i=8
3:将(++j)+14=8+14=22

梅沙小子 发表于 2013-3-28 17:54:42

q=(++j)+(++j)+(++j)
中分三步计算
1:j先自增1 j=7
2:先计算后两个(++j)+(++j)=14
将第一个(++j)与后两个相加前先要自增1 j=8
3:将(++j)+14=8+14=22

yuan71058 发表于 2013-3-28 20:42:22

小甲鱼视频有讲

小亮1201 发表于 2013-3-28 20:52:11

楼上已经给出答案了,不过我还是建议不要在 i++ 和 ++i 纠结,不同的编译器所得的答案是不一样的。这也是C语言一个特点。

更替的四季 发表于 2013-3-28 22:25:28

没有哪个程序员会写这种代码的

↓《 发表于 2013-3-28 22:40:28

得到.exe文件后反汇编一下!就应该能弄明白的!试下

scottly 发表于 2013-3-29 16:11:47

你用的是vc6.0编译器吧,不同的编译器结果不同,你可以试试,其实是vc编译器对上面的程序进行了优化,q先自增2次得7   所以运算结果为7+7+8=22,我也搞不懂为什么?只能说是编译器的错。

指间的阳光 发表于 2013-4-18 10:41:39

不要自己给自己找麻烦啊。

我是师兄 发表于 2013-4-18 10:56:39

这个不叫编译器优化 晕 谁说的
编译器优化不会造成 不同编译器运行结果不同的

刺客信条 发表于 2013-5-30 23:10:26

这个问题小甲鱼视频里讲过,反汇编一下看看问题出在哪里。

阔怀 发表于 2015-8-25 10:31:46

帮顶
页: [1]
查看完整版本: 程序 问题