不是我不明白,这世界变化快!

yxyhack 2007-07-22 04:57:35
#include <stdio.h>

main()
{
int i=3,k;
k=(++i)+(++i)+(++i);
printf("%d",k);
}

这个题再基础不过,但是我却算错了,

我感觉k应该是15,但编译器告诉我是16,谭浩强的书说是18,为什么?
...全文
223 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
iamliadai 2007-07-22
  • 打赏
  • 举报
回复
we must keep in mind that Dont use more than one "++" or "--" operator in one expression
neuwjyou 2007-07-22
  • 打赏
  • 举报
回复
我用4个编译器编译了这个程序,
tc 和win-tc是18,VC和G++是16
yxyhack 2007-07-22
  • 打赏
  • 举报
回复
呵呵,这道题它有答案,是18!
它不是让我们认识不同的编译器,而是让我们认识TC2.0的编译器。
prgmBaggio 2007-07-22
  • 打赏
  • 举报
回复
可是考试单单就有这样的题


出题的老师也够垃圾的...
prgmBaggio 2007-07-22
  • 打赏
  • 举报
回复
这个题目的目的是让我们认识到不同的编译器也会影响程序的运行结果,而不是让我们去认识这个结果是怎么得来的
yxyhack 2007-07-22
  • 打赏
  • 举报
回复
呵呵,这是我在教一个朋友C程序基础的时候出现的问题,本来谁也不会写这样的程序的,不是我们故意避免这样写,而是写程序是根本用不着这样写!!

可是考试单单就有这样的题,没办法,被编译器玩了一把。

这个题JAVA的编译器结果是15,TC2.0是18,VC6.0是16.
justshe 2007-07-22
  • 打赏
  • 举报
回复
同意楼上的说法。
以前我也被这样的问题搞得很晕,后来发现自己从来没有用到过。
windboyzsj 2007-07-22
  • 打赏
  • 举报
回复
这种问题不要讨论了
没实际意义,只有考试钻牛角的出题人才会弄
实践中一般不会这样写代码, 除非那程序员SB
comman_ndsc 2007-07-22
  • 打赏
  • 举报
回复
楼主是在vc60下编译的吧!
k=(++i)+(++i)+(++i);像这样的写法在不同的编译器下确实会得到不同的结果。
在TC下就得到 18 原因是先进行了三次++i运算,然后得到i为6 然后k = i + i +i结果为 18

像k=(++i)+(++i)+(++i)这种写法是不被提倡的。除非你很明白你的编译器将要做什么。但即使是这样。也会为程序的移植带来隐患。
cceczjxy 2007-07-22
  • 打赏
  • 举报
回复
问楼上:
这是不是编译器优化的问题?
星羽 2007-07-22
  • 打赏
  • 举报
回复
自己看看汇编代码就知道了
星羽 2007-07-22
  • 打赏
  • 举报
回复
跟编译器相关

vs2005就是18

69,371

社区成员

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

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