m--不是应该是先输出m的当前值再改变m的值吗为啥不选c
main()
int m=5;
if(m++>5)
printf(%dm)
else
printf(%d,m--)
3 回答
onemoo
TA贡献883条经验 获得超454个赞
“m--不是应该是先输出m的当前值再改变m的值吗”
不要这么记,因为这句话中的“输出”是什么意思啊? 这可能会使你错误地理解自增减表达式的作用。
m++ 表达式的值就是 m 自增前的值,当然这个表达式还会使 m 自增 1。
同理,m-- 表达式的值是 m 自减前的值,当然这也会使 m 自减 1。
那么这个代码中:
一开始,if 中的判断条件是 m++ 表达式和 5 的大小作比较,m++ 表达式的值就是 5,所以 5 > 5 的结果是 false,故代码将进入 else 分支。
代码执行到 else 分支,重要的一点是:这时 m 已经完成了自增,这时 m 的值是 6。
这里要 print 的是 m-- 表达式的值,同理,m-- 表达式的值还是 6,所以会打印出 6。当然 m 还会被自减 1,所以最终 m 的值会是 5。
注意:我在上面的描述中用了“m++ 表达式的值”和“m 的值”这两中说法。没错,它们是不同的东西! 这个代码中使用到的分别是 m++ 和 m-- 表达式的值,并没有直接用 m 的值,所以不要被 m 本身值的增减变化误导了。
其实我给你之前问题的回答中提到了这些内容,如果你还是不太清楚的话,请看 http://www.imooc.com/wenda/detail/350085 中提到的那个详细解答。
onemoo
TA贡献883条经验 获得超454个赞
对了,我说的格式化是指这样的效果:
int main(void) { int m=5; if(m++>5) printf("%d", m); else printf("%d", m--); }
这样比你直接写代码要好看多了吧?
而且自带行号,方便别人给你指出哪行有问题。
- 3 回答
- 0 关注
- 1538 浏览
添加回答
举报
0/150
提交
取消