int a=1,b=0; b = (a++)+(++a)+(a++)+(++a); int a =1, b =0; b = (++a)+(++a)+(++a)+(a++); 答案与解释
4个回答
展开全部
对于前置表达式,是通过引用(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了。所以,除非你是在出考试试卷,否则不要在你的程序中出现同一个变量两次以上自增/自减操作符。这除了破坏你程序可读性,增加维护难度外,没有多少帮助。
你知道这些就可以推算你的结果了。。。
例如: int j, i= 3;
j = (i++)+(i++)+(++i);
计算后,i=6,j却可能等于12,也可能等于10.这就取决于编译器了。因为在标准中,并没有规定复合表达式中,相同运算等级的运算顺序是从左边开始还是从右边开始。例如这个例子,从左边开始,就是3+3+4 = 10;从右边开始就成了4+4+4=12了。所以,除非你是在出考试试卷,否则不要在你的程序中出现同一个变量两次以上自增/自减操作符。这除了破坏你程序可读性,增加维护难度外,没有多少帮助。
你知道这些就可以推算你的结果了。。。
展开全部
:(2+2+2+3)=9,(3+3+4+4)=14是谁告诉你是这么加的?
追问
网上的
追答
我用java运行了上面那句代码,结果是12和13
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个属于未定义行为,不同的编译器结果不一样的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1+3+3+5=12
2+3+4+4=13
2+3+4+4=13
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询