注册 登录
编程论坛 新人交流区

[求助]求k=(i++)+(i++)+(i++)的值

zhy20045923 发布于 2007-10-04 08:24, 1254 次点击
虽然知道这个问题无聊而且没有意义,但我还是想知道为什么。
int i=3,k;
k=(i++)+(i++)+(i++);
在 VC++ 2003 和 Dev-C++ 中 k 的值都是9。
但我觉得不管怎么算,k的值应该是k=3+4+5=12,这到底是怎么回事啊?
33 回复
#2
老男人2007-10-04 09:14

应该是执行完整条语句后才加一的吧

#3
nuciewth2007-10-04 09:59
全部处理完 I后再相加.
#4
wuquan2007-10-04 10:31
先扫描一遍表达式,认为I=3,在做加法运算,得出运算结果为9,最后在将I自增1
#5
赵殿良2007-10-04 10:48

#include <iostream>
using namespace std;

int main()
{
int i=3,k;
k=(i++)+(i++)+(i++);
cout<<"i="<<i<<endl;
cout<<"k="<<k<<endl;
return 0;
}
运行结果
i=6
k=9
Press any key to continue

#6
栖柏2007-10-04 10:51
k=(i++)+(i++)+(i++);
解释一点,i++的值是3,
而i值变了,由3->4->5
输出时变为6了
#7
ygh4494977112007-10-04 11:13
潭浩强如此解释:大多数的c++系统把3作为表达式中所有i的值,因此3个i相加,得到表达式的值为9。在求出整个表达式的值后再实现自加3次,i的值变为6。ANSIC++标准对表达式求值的顺序,并无统一规定,在求解含++和--运算符时会出现歧义。
本人认为还是少用为妙
#8
nuciewth2007-10-04 11:14
不要用最好.
#9
光荣匿名人士2007-10-04 11:28
用这个明显唬弄人的,没必要了解太多
#10
nuciewth2007-10-04 11:28
好象我们在刷.
#11
栖柏2007-10-04 11:39
回家...
#12
夜子2007-10-04 14:14
确实是先把整个语句扫描下后,执行语句,然后才加1
#13
sishui1982007-10-04 17:42

答案是6。但是这个时候I=6.

#14
oppe2007-10-04 18:22
回复:(zhy20045923)[求助]求k=(i++)+(i++)+(i++)的...
因编译器而异,用turboc的话是楼主这么算的
#15
giant6112007-10-04 18:47
回复:(zhy20045923)[求助]求k=(i++)+(i++)+(i++)的...
去问谭浩强
#16
栖柏2007-10-04 19:03
以下是引用giant611在2007-10-4 18:47:02的发言:
去问谭浩强

我又不认识他,怎么问啊
有他QQ么?

#17
coachard2007-10-04 19:04
请拨答110询问谭浩强的一切信息~~~~~~
#18
栖柏2007-10-04 19:10
刚拨,110说他也不知道,叫我拨打120试试....
我被人打了
#19
zhb_ice2007-10-06 21:47
结果未定义 不同的编译器 结果不同
这种代码就不要写 写了会被炒掉的
#20
张行天下2007-10-06 21:56

各种语言的I++时机不一样哦,这个不需要你费力去想为什么,只要写个小程序亲自试验一下,记住,哦,原来是结果是这个样子就行了。

#21
wu0shu0feng2007-10-06 21:59
其实我感觉不同的编译工具不同,优先级也不同.
#22
lyb868182007-10-06 23:46
不要这样用,不过我觉得这样的语句只有考试才有。
#23
succubus2007-10-07 02:33
不要写这种有副作用的代码
不同编译器结果不同
#24
guoxhvip2007-10-07 05:32
如楼上所说 在Visual Studio 2003和2005里都输出的12
#25
忘记喧嚣2007-10-07 10:28
顶 5楼 呵呵 实践最重要
#26
zamboninite2007-10-07 10:32
编译器不同,输出顺序有可能不同
#27
snipered2007-10-07 10:36
我看是因为那3个i++平行所以i++值相等
又因为i++是先输出后运算所以i++的值是4了但输出的是3
3+3+3=9
用++i试试吧
#28
萝卜侦探2007-10-07 10:37
I++是执行完第一次运行后 才往上面加的 如果 ++I 就跟你说的那个一样了
#29
sunyuantz2007-10-07 11:55
c prime puls 上说加;表示表达式结束,c编译器是按表达式执行的
#30
huxs2007-10-07 12:13
确实有点难懂,看了不太懂
#31
Baby仔2007-10-07 12:23
循环都还没开始,I怎么加1啊? 所以还是得9
#32
mebol2007-10-07 13:16
我想是因为:如果i=3,执行第一个i++时,植为3,i自增为4;
执行第二个i++时,植为4,i自增为5;
执行第三个i++时,植为5,i自增为6;
三个i++的植加起来,即:k=3+4+5答案为12.
我没有实验,不知对不对?
#33
王振兴2007-10-07 16:20
++放后面是后加,做完这个式子再加!
#34
小刚刚2007-10-07 18:54
循环没开始所以K为9
i有三次自加所以为6
1