一个关于自加自减的问题

wsfang 2010-02-26 06:07:56

在同一个编译器里,下面的代码运行后结果不一样,不明白

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

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


请高手指教一下。
...全文
174 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wsfang 2010-03-01
  • 打赏
  • 举报
回复
我用WinTC编译结果是一个3,一个6。。
。。但是在Eclipse里运行结果都是6,不知道楼上的在VC里运行结果是好多,楼上有位在VS2008里运行结果是3,我在看谭浩强的C语言里提到 j=(i++)+(i++)+(i++);j的结果就是3,应该是一致的
不过Java,和c/c++的编译器编译结果竟然不一样。。汗
szqh97 2010-02-27
  • 打赏
  • 举报
回复
又是这种代码啊,不同的编译器不同的啊
「已注销」 2010-02-27
  • 打赏
  • 举报
回复
对于初学者,有些基本语法:如楼主提到的,如果不知编译器如何来处理,就直接加个括号,就OK了。

这种语法没必要深究...

有这些时间多看看数据结构,计算机体系结构,操作系统,数据库之类的很重要基础课程吧...
suanyuan 2010-02-27
  • 打赏
  • 举报
回复
換個編譯器,你的版本太老舊了
katharineyang 2010-02-27
  • 打赏
  • 举报
回复
在VC上运行结果一致。楼上说的很正确,理解++i和i++就可以了的
还有printf("%d\n",(i++) + (i++) + (i++)); 对于编译器来说,i++) + (i++) + (i++)是一种未定义的行为, 所以结果跟编译器有关系。
shashenyidaoOCEAN 2010-02-26
  • 打赏
  • 举报
回复
引用 4 楼 tankdin 的回复:
只有学校里部分脑子有点抽的老师才会抠这些没意义的东西,这完全是浪费时间。
就是
febbird1984 2010-02-26
  • 打赏
  • 举报
回复
记住i++和++i有什么区别就可以了,不同的编译器会有不同的处理方式,工作中写这样的代码就是找抽
tankdin 2010-02-26
  • 打赏
  • 举报
回复
只有学校里部分脑子有点抽的老师才会抠这些没意义的东西,这完全是浪费时间。
CCCCCCCCCCCCCCC 2010-02-26
  • 打赏
  • 举报
回复
未定义行为
stardust20 2010-02-26
  • 打赏
  • 举报
回复
我用vs2008运行两个结果都是3.。这个大概和编译器有关。。
昵称很不好取 2010-02-26
  • 打赏
  • 举报
回复
这样的代码不规范,具体结果依编译器不同而不同
这些代码没有什么意义,楼主不用在此费心力

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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