关于 C 语言 i++与++i 的问题

2015-08-24 10:43:24 +08:00
 speed

int a,b;

int i=10 , j=10;

a=(i++)+(i++)+(i++);

b=(++j )+(++j )+(++j );

a 与 b 的值,一直没搞明白!!!

3065 次点击
所在节点    问与答
33 条回复
speed
2015-08-24 12:34:23 +08:00
@Kilerd
谢谢,你这样一写豁然开朗啊
qwlhappy
2015-08-24 12:40:34 +08:00
感觉顺序点和编译器关系很大
似乎有一些顺序点是标准 c 里面有规定的,就好像分号,或者其他一些杂七杂八的东西
似乎相关博客很多?搞不懂的话不如直接看汇编咯
broodnes
2015-08-24 12:42:03 +08:00
我晕了, vs2015 的结果是 a=30 , b=39
wwwqq2com
2015-08-24 13:00:43 +08:00
不要再用 VC6.0 了,这玩意儿比 C++标准出现还早
loading
2015-08-24 13:07:05 +08:00
我帮你问下大家:
++i ,这玩意大家有几次会用?
zcbenz
2015-08-24 13:11:00 +08:00
怎么还有问这种问题的,楼上凡是尝试解释结果的都应该去看看这个:
http://stackoverflow.com/questions/4176328/undefined-behavior-and-sequence-points
iosx
2015-08-24 13:17:54 +08:00
a=(i++)+(i++)+(i++);

b=(++j )+(++j )+(++j );
谁要这么写代码,我掐死他。
danny200309
2015-08-24 13:19:07 +08:00
@zcbenz 其实 6 楼早就说出了问题的关键,楼主没有注意吧
FrankFang128
2015-08-24 13:20:13 +08:00
把写出这样代码的人开除即可,不需要明白。
fds
2015-08-24 13:36:42 +08:00
标准里没有定义这种操作的顺序,所以怎么实现都可以,出现什么结果都正常。总之就是不要用。
Kilerd
2015-08-24 14:00:01 +08:00
@loading
```c
for (int i=0;i<10;++i ){}
```

一般我都会这样写。
虽然这里写 i++ 和 ++i 都没差。
但是逻辑不能乱
dacapoday
2015-08-24 14:02:05 +08:00
加一个编译器结果:
用安卓的 c4droid
a 为 33
b 为 36
msg7086
2015-08-24 20:22:38 +08:00
返回 30 也好 300 也好 1234567 也好都是正常的。
甚至产生编译错误也是正常的。
因为严格说这不属于合法 C 代码(因为无法唯一地编译成机器语言)。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/215498

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX