鱼C论坛

 找回密码
 立即注册
查看: 1884|回复: 7

还是这样的问题,我实在没搜索到答案,发帖求助

[复制链接]
发表于 2014-8-27 10:31:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
int a = 0;int b = 1;
a = b++ +(++ b)+ b;
输出a的结果为6.
我的理解是
1+3+3  应该是7
C#输出结果也是7
我知道是因为编译器不同导致的,但是具体怎么分析,我忘记了。
那个帖子  我也搜索不到了。
希望好心人,把小甲鱼那个解释贴  给个链接。或者,直接回答下这个问题。
感激不尽。


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-8-27 10:36:27 | 显示全部楼层
各路大神,这个问题,应该是老问题了。
实在没有搜索到,以前的帖子。才过来发问,别沉呀。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-8-27 10:50:59 | 显示全部楼层
tsl 发表于 2014-8-27 10:36
各路大神,这个问题,应该是老问题了。
实在没有搜索到,以前的帖子。才过来发问,别沉呀。

你直接用3~4个不同的C语言编译器得到不同的结果,然后你再决定是否还有必要问这个问题,以及基于那个C语言编译器问这个问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-8-27 10:54:59 | 显示全部楼层
本质上就是因为这种代码在不同的C编译器上会得到不同的结果,所以一旦你写出这样的代码,马上就会被人家看不起(因为你从来都只用一个C语言编译器对不对?还不知道有其它C语言编译器存在对不对?)
一个很好的建议是在一个语句中,会对同一个变量值产生改变的操作只能出现一次。
比如你的例子里
a = b++ +(++ b)+ b;
其中b++和++b都会改变变量b的值,所以这种语句绝大多数都是编译器相关的(在不同C编译器下得到不同的结果)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-27 11:01:24 | 显示全部楼层
仰望天上的光 发表于 2014-8-27 10:54
本质上就是因为这种代码在不同的C编译器上会得到不同的结果,所以一旦你写出这样的代码,马上就会被人家看 ...

:big我也是刚学C++,谢谢你的回答。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-8-27 11:01:59 | 显示全部楼层
当然,如果你是学生的话,确实有难处,因为很多老师本身就对这个问题不清楚,又非要用这种无聊的问题来考试,基于前面的分析,你可以在内心深处鄙视这些老师。不过回到现实,考试还是要得分的是不是?下面给你一种这些“老师”的分析逻辑(他们一定是这样分析的,不管结果和编译器的结果是否一致)。

a = b++ +(++ b)+ b;
这个表达式很复杂,所以要对它进行简化,基本思路就是把复杂的语句分解成几句简单的语句,分解原则是这样的:
如果出现了一次++b,就在该语句中把++b改为b同时在该语句之前加上一句++b;
如果出现了一次b++,就在该语句中把b++改为b同时在该语句之后加上一句++b;

所以该语句等价于
++b;
a = b +(b)+ b;
++b;
好吧,如果是考试,你就成功得到了a的值(不要在编译器上试验了,试验时报也是正常的,考试得分才是王道)

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-8-27 12:10:16 | 显示全部楼层
我只是路过打酱油的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-8-27 17:08:40 | 显示全部楼层
研究这个毫无意义
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 21:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表