请教一个有关i++的问题

lywei123 2004-01-02 11:55:56
int i;
i=3;
m=(i++)+(i++)+(i++);
printf("%d",m);
结果输出:9

int i;
i=3;
m=((i++)+(i++)+(i++));
printf("%d",m);
结果输出:9

int i;
i=3
printf("%d",(i++)+(i++)+(i++));
结果输出:12

为什么呢?不明白呀

...全文
47 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
lazygod 2004-01-03
  • 打赏
  • 举报
回复
TMD,考试出这种题真没劲。
++在先,先加自己,后取表达式的值。
++在后,后加自己,先取表达式的值。
101monster 2004-01-03
  • 打赏
  • 举报
回复
呵呵,环境、编译器的问题,这种代码本来就属于有争议的,不推荐使用。
neptunez 2004-01-03
  • 打赏
  • 举报
回复
可悲的是很多考试都以此类题拿出来考
hongfeeling 2004-01-03
  • 打赏
  • 举报
回复
研究一下会有一些收获,
不过太用心于此,就不妙了。
这种代码,在绝大多数情况下的出现,都可以避免的。
foxmail 2004-01-03
  • 打赏
  • 举报
回复
k=i,i=i+1
其中i=i+1要在那行语句执行完以后才执行

而++i等价于k=(i=i+1)
foxmail 2004-01-03
  • 打赏
  • 举报
回复
是不是谭浩强书上的题目啊?
反正就是他们那帮老学究想出来的

别做这种题目了
反正记住
i++是k=i,i=i+1 就行了

int i;
i=3
printf("%d",(i++)+(i++)+(i++));
VC6里面输出是9

至于输出结果,不同的编译器都有可能不能,具体的看汇编代码吧
zhangfjj 2004-01-03
  • 打赏
  • 举报
回复
对于这种自增运算符的处理确实与编译器有关呀,其实你可以翻翻谭浩强的书,他书上专门讨论了这个问题,我想这个东西主要用来讨论自增运算符的副作用,一个好的可读性强的代码,最好不要在一个语句中出现对一个变量多次自增或自减运算
zhangfjj 2004-01-03
  • 打赏
  • 举报
回复
对于这种自增运算符的处理确实与编译器有关呀,其实你可以翻翻谭浩强的书,他书上专门讨论了这个问题,我想这个东西主要用来讨论自增运算符的副作用,一个好的可读性强的代码,最好不要在一个语句中出现对一个变量多次自增或自减运算
shuishuangyu 2004-01-03
  • 打赏
  • 举报
回复
麻烦
19830711 2004-01-03
  • 打赏
  • 举报
回复
up
809982 2004-01-03
  • 打赏
  • 举报
回复
呵呵,好久没见到此类问题了,尽量使用同一家编译器提供商提供的开发工具。
comefirst 2004-01-03
  • 打赏
  • 举报
回复
我在tc,bcb下调试下面这段代码
int i;
i=3 ;
printf("(i++)=%d\n",(i++));
i=3;
printf("(i++)+(i++)=%d\n",(i++)+(i++));
i=3;
printf("(i++)+(i++)+(i++)=%d\n",(i++)+(i++)+(i++));
i=3;
printf("(i++)+(i++)+(i++)+(i++)=%d\n",(i++)+(i++)+(i++)+(i++));
getchar();

输出结果:
(i++)=3
(i++)+(i++)=7
(i++)+(i++)+(i++)=12
(i++)+(i++)+(i++)+(i++)=18
估计是在前一项i++加上后一项i++的时候,前一项又+1了
就像这样
3=3
4+3=7
5+4+3=12;
6+5+4+3=18;
vc下面我没有调试过,不知道结果。

TodaySunday 2004-01-03
  • 打赏
  • 举报
回复
环境、编译器的问题
wonderlandsh 2004-01-03
  • 打赏
  • 举报
回复
是啊
lywei123 2004-01-03
  • 打赏
  • 举报
回复
这样的问题我也是第一次见到,那天我一个非计算机专业的朋友问我,说他们考试有这么一道题,我想了一下午也没明白。这样的东西,也恐怕只有在考试中才会出现吧
xinhuowei 2004-01-03
  • 打赏
  • 举报
回复
这个问题我也经常遇到,尤其是在考试中,总是搞混,这下可是搞明白了。
heuristic 2004-01-03
  • 打赏
  • 举报
回复
实际中很少有人把++i i++ 写得太复杂的

估计也只有老谭之流爱弄这噱头

知道一次变换结果就行了,在编程的时候尽量不要在一个表达式里++,--个没完
sharkhuang 2004-01-03
  • 打赏
  • 举报
回复
理解一次!以后就靠细心了!其实没有多大意思!
只要知道在c++

++1 效率 比i++ 高就是了
qingdong 2004-01-03
  • 打赏
  • 举报
回复
在这个坛子里有很多这样的贴子,看看以前的。、
编译器不同,得到的结果也不同。
只要知道i++与++i的区别就可以了
whmily 2004-01-03
  • 打赏
  • 举报
回复
妈的
这种问题太无聊了
它与编译器有关
在语句:
i++; (解释为,i;i=i+1;
即:先用i的原始值,在该条语句结束后再将i的值加1)
++i; 与上正相反

而你的题目:与编译器的执行顺序有关;
建议楼主对此类问题不要深究。并没有太大意思。
将精力放到编程中,比这个有意义的多
加载更多回复(2)

69,369

社区成员

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

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