int a=1,b=0; b = (a++)+(++a)+(a++)+(++a); int a =1, b =0; b = (++a)+(++a)+(++a)+(a++); 答案与解释

:(2+2+2+3)=9,(3+3+4+4)=14为什么是这样加的... :(2+2+2+3)=9,(3+3+4+4)=14 为什么是这样加的 展开
 我来答
qipilangfour
推荐于2018-04-21 · TA获得超过232个赞
知道小有建树答主
回答量:274
采纳率:0%
帮助的人:126万
展开全部
对于前置表达式,是通过引用(by-reference)来处理的。也就是,该表达式还回的是变量自身。++i表达式还回的就是&i,自然i中的值是增加过后的值,不然运算结果就会丢失。对于后置表达式,是通过传值(by-value)来实现的。也就是用一个临时变量来保存结果,然后还回这个临时变量。所以i++的结果是i还没有变化,要到一个完整语句(出现‘;或者函数调用)后才变化。

例如: int j, i= 3;
j = (i++)+(i++)+(++i);
计算后,i=6,j却可能等于12,也可能等于10.这就取决于编译器了。因为在标准中,并没有规定复合表达式中,相同运算等级的运算顺序是从左边开始还是从右边开始。例如这个例子,从左边开始,就是3+3+4 = 10;从右边开始就成了4+4+4=12了。所以,除非你是在出考试试卷,否则不要在你的程序中出现同一个变量两次以上自增/自减操作符。这除了破坏你程序可读性,增加维护难度外,没有多少帮助。

你知道这些就可以推算你的结果了。。。
ae86zlk
推荐于2018-04-11 · 知道合伙人IT服务行家
ae86zlk
知道合伙人IT服务行家
采纳数:344 获赞数:1414
移动开发程序员

向TA提问 私信TA
展开全部
:(2+2+2+3)=9,(3+3+4+4)=14是谁告诉你是这么加的?
追问
网上的
追答
我用java运行了上面那句代码,结果是12和13
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cornerfighter
2018-04-20 · 超过12用户采纳过TA的回答
知道答主
回答量:65
采纳率:0%
帮助的人:18.1万
展开全部
这个属于未定义行为,不同的编译器结果不一样的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ruc加油
2018-04-01
知道答主
回答量:1
采纳率:0%
帮助的人:888
展开全部
1+3+3+5=12
2+3+4+4=13
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式