C语言中,m=0 A=(++m)+(++m); 此时,A=?,m?

在VC中运行了,结果是A=4,m=2。一直想不明白为什么。求高人解答。... 在VC中运行了,结果是A=4,m=2。一直想不明白为什么。求高人解答。 展开
 我来答
伊·梵beec
推荐于2018-04-19 · TA获得超过2161个赞
知道大有可为答主
回答量:1897
采纳率:0%
帮助的人:1385万
展开全部
这个和编译器自身处理过程有关系,不同的编译器,结果不尽相同,不必过于纠结。

比如
A = (++a) + (++a) + (++a);

有些编译器会先计算右边,最后赋值给A:++a;++a;++a;A=a+a+a;
有些编译器实际的过程变成:A=++a; A=A+(++a);A=A+(++a);
有些编译器实际的过程变成:A=(++a)+(++a); A=A+(++a);

有些编译器实际的过程变成:A=(++a); A=A+((++a)+(++a));
百度网友201df4b
2013-01-07
知道答主
回答量:10
采纳率:0%
帮助的人:4.1万
展开全部
3.2 使用我的编译器,下面的代码int i=7; printf("%d\n", i++ *
i++); 返回49?不管按什么顺序计算, 难道不该打印出56吗?
尽管后缀自加和后缀自减操作符++和--在输出其旧值之后才会执行运算,
但这里的“之后”常常被误解。没有任何保证确保自增或自减会在输出变量原值之
后和对表达式的其它部分进行计算之前立即进行。也不能保证变量的更新会在表
达式“完成” (按照ANSI C的术语, 在下一个“序列点”之前, 参见问题3.7)之前
的某个时刻进行。本例中, 编译器选择使用变量的旧值相乘以后再对二者进行自
增运算。
包含多个不确定的副作用的代码的行为总是被认为未定义。(简单而言, “多
个不确定副作用”是指在同一个表达式中使用导致同一对象修改两次或修改以后
又被引用的自增, 自减和赋值操作符的任何组合。这是一个粗略的定义; 严格的定
义参见问题3.7, “未定义”的含义参见问题11.32。) 甚至都不要试图探究这些东
西在你的编译器中是如何实现的(这与许多C教科书上的弱智练习正好相反);正
如K&R明智地指出, “如果你不知道它们在不同的机器上如何实现, 这样的无知可
能恰恰会有助于保护你。”
来自:求助得到的回答
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
赛车引擎
2013-01-06 · TA获得超过459个赞
知道小有建树答主
回答量:432
采纳率:100%
帮助的人:226万
展开全部
你看啊,m在执行这句代码之前为0,前置++是在执行之间完成的,所以共执行两次++运算,0自加两次变成了2,所以这句代码实际上执行的是A=2+2
追问
那为什么(++m)+(++m)+(++m)=7 啊?
追答
vs2010运行结果为9
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式