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

有关自增,自减的问题。

黄love昏 发布于 2012-08-12 18:30, 740 次点击
#include<stdio.h>
void main()
{
int i=5,j=5,p,q;
p=(i++)+(i++)+(i++);
q=(++i)+(++i)+(++i);
printf("%d,%d,%d,%d",p,q,i,j);
}
我运算的答案是15,31,11,5
书上的答案是15,24,8,5
12 回复
#2
jarryjsq2012-08-12 18:43
以自己调试的程序为准,另外这种程序少写,自己写的时候头疼,别人看的时候也头疼。
#3
黄love昏2012-08-12 18:58
回复 2楼 jarryjsq
没有,我只是想弄懂这个自增自减
#4
丛中之歌2012-08-12 19:03
显然 q应该是 (++j) 注意是 用到j,不然你定义j有什么用
#5
黄love昏2012-08-12 19:19
回复 4楼 丛中之歌
对,这个是我写错了,但运行后还是不一样,
答案是15,22,8,8
#6
zhongmuzhong2012-08-12 21:24
这些是错误写法,属于未定义,结果在不同平台不一样,两个序列点之间对一个变量只能有一次修改,
#7
pangding2012-08-12 23:16
6楼专业。

楼主看的书不行,如果有条件换一本吧。
#8
peach54602012-08-13 10:49
每隔几天,就会有一个新手来问一些如果在工作中写出来会被开除的代码...
#9
风逸护焰2012-08-13 15:09
不知道楼主懂了没有,小弟虽不是这方面的行家,不过关于i++和++i这问题倒是比较清楚;前者 先赋值,后自增;后者相反 先自增,后赋值。记住这点,问题就迎刃而解了,就拿上面的题为例:p=(i++)+(i++)+(i++);这属于刚说的前者,先赋值:p=5+5+5=15,再自增:i=5+1+1+1=8;q=(++j)+(++j)+(++j);属于后者,先自增:j=5+1+1+1=8,再赋值:q=8+8+8=24;所以最后i、j的值都是8。希望对楼主有用!
#10
imleijunhan2012-08-13 15:50
我测试了一下,15,24,8,8------------------9楼我认同!
#11
sina_small2012-08-13 19:24
其实,我说点实在的。

题目的意义,就是要你明白自增、自减的意思。

这种题目,我一般不看的,因为到实际的应用中,如果写这么复杂、难懂的代码,我觉得不好,别人看着、理解也费力。

虽然把代码精简在一行里面确实“爽”,不过我个人不提倡这种“精简美”。

楼主,你其实明白 ++ 、-- 是咋回事就行了~~嘿嘿
#12
peach54602012-08-14 06:58
以下是引用zhongmuzhong在2012-8-12 21:24:37的发言:

这些是错误写法,属于未定义,结果在不同平台不一样,两个序列点之间对一个变量只能有一次修改,

高手啊...我还从来不知道序列点是什么东西,专程跑去搜了一下...
#13
wukaiye2012-08-14 09:52
i++表示i+1+1吗?我测试的是15,22,8,...求高人指点
1