为了账号安全,请及时绑定邮箱和手机立即绑定

我不太明白下面的结果是怎么算出来的(自增自减运算)

http://img1.sycdn.imooc.com//5831584900010c1105990575.jpg

我不太明白下面的结果是怎么算出来的(自增自减运算)

正在回答

2 回答

在前面的回答中找到的正确的回答

通常说,a++是先取值后运算,++a是先运算后取值。实际上这里涉及好几个基本概念! 先确定你清楚“运算符”、“表达式”和“语句”的概念:

++ 是一个“自增运算符”,自增运算符有两种形式:前缀自增(++a)和后缀自增(a++)。

运算符和操作数合起来就是一个表达式(a++、++a都是表达式,a就是操作数)。注意:每一个表达式本身都有值(和其类型),有的表达式还有“副作用”。比如自增表达式的副作用就是使其操作数自增1。那么自增运算表达式的值是什么呢? a++ 的值就是 a 的值,而 ++a 的值等于 a+1。 

表达式后面加上一个分号才是一个完整的“语句”。

还有一个关键内容:前面说使操作数自增1是自增表达式的副作用,那么这个副作用什么时候发生呢? 准确地说是在“序列点”后保证会发生。 序列点这个概念比较复杂,对于例题中这个简单的情况,你只需要知道:在本语句结束后,这些副作用肯定发生了。


下面讲解下3-3的例题:

int a = 100; 最开始时a是100。

打印 a++;  这个printf会打印a++的值,注意是a++表达式的值,看我前面的讲解,a++的值就是a的值,也就是100。 别忘了这语句结束后a的值就会自增1(也就是副作用发生了)。

打印 ++a;  目前a的值为101。现在要打印++a表达式的值,++a的值就等于a+1,所以会打印出102。 此语句后a=101+1=102。

打印 --a;  这次要打印--a表达式的值,同自增一个道理,--a的值等于a-1,所以会打印出101。 此语句后a=102-1=101。

打印 a--;  a--表达式的值就是a的值,所以打印出101。 此语句后a=101-1=100。

打印 a+1;  这表达式与自增无关,只是打印a+1的值,就是101。 对a本身的值没有影响(加法表达式没有副作用)。

打印 a;  这时a的值当然还是100了。


2 回复 有任何疑惑可以回复我~
#1

安小瞳 提问者

谢谢大神,棒
2016-11-28 回复 有任何疑惑可以回复我~
#2

爲了自己的時間奮鬥

这个解答很清晰,谢谢!!!
2016-12-08 回复 有任何疑惑可以回复我~

刚开始a=100,第一个printf时先输出a=100然后给a自增,此时a=101,
第二个printf时先给a自增,此时a=102然后输出a=102,

第三个printf时先给a自减,此时a=101然后输出a=101,

第四个printf时先输出a=101,然后a自减,此时a=100,

第五个printf时直接输出a+1=101,但是没有改变a的值,所以此时a还是为100,

第六个printf时直接输出a=100;

1 回复 有任何疑惑可以回复我~
#1

qq_xiaopiaor_04013783

你算得结果和教程给的运算结果不一样
2016-11-20 回复 有任何疑惑可以回复我~
#2

King丶宾 回复 qq_xiaopiaor_04013783

一样的,输出的才是显示出来的,
2016-11-21 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C语言入门
  • 参与学习       926207    人
  • 解答问题       20797    个

C语言入门视频教程,带你进入编程世界的必修课-C语言

进入课程

我不太明白下面的结果是怎么算出来的(自增自减运算)

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信