C语言加加运算问题

mayer 2009-08-12 10:03:22
#include <stdio.h>

int main(int argc, char * argv[])
{
int i, a, b, c, d;

i = 3;
a = (i++) + (i++) + (i++);
printf("i=%d a=%d\n", i, a);

i = 3;
b = (++i) + (++i) + (++i);
printf("i=%d b=%d\n", i, b);

i = 3;
c = (i++) + (++i) + (i++);
printf("i=%d c=%d\n", i, c);

i = 3;
d = (i++) + (i++) + (++i);
printf("i=%d d=%d\n", i, d);

return 0;
}

以上程序vc和gcc得到的b均是16,实在没搞明白,请各位大虾解释分析一下。
...全文
178 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yellowhwb 2009-08-12
  • 打赏
  • 举报
回复
在VC里反汇编,看看汇编代码就很清楚了,不同编译器反汇编后代码是不同的,所以看看汇编,了解一下过程就行了,没必要搞出个最终答案!
CYBEREXP2008 2009-08-12
  • 打赏
  • 举报
回复
1.3+3+3=9
2.4+5+6=15
3.3+4+5=12
4.3+3+4=10

我自己算的,也搞不明白

顶。。。。。。。。。。。。。
pmerOFc 2009-08-12
  • 打赏
  • 举报
回复
a = (i++) + (i++) + (i++);
这种写法本身就是C语言不容许的
(语法没问题,语意没定义)
所以不用讨论
yunaijun 2009-08-12
  • 打赏
  • 举报
回复
en ,是的,楼上正解
coverallwangp 2009-08-12
  • 打赏
  • 举报
回复
不同的编译器给出的结果不一样,这种问题不值得研究。
以前有几个贴子也是讨论这个问题的。
满衣兄 2009-08-12
  • 打赏
  • 举报
回复
额...
我vs2005得到的结果是18

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧