关于printf函数中++,--的输出顺序问题

对于输出过程常常出现以下的问题:
在这里插入图片描述对于输出的顺序往往不明所以,经过调试可以逐步分析:
1.改变第一个a- -:
在这里插入图片描述
2.改变++a:
在这里插入图片描述
3:
在这里插入图片描述4:
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

通过上述几个例子进行一点总结:
首先需要明确的一点是,函数括号内的运行顺序是从右向左的,对于上述前三个例子中的第二个printf,即便是从右向左运行,但运行结果不改变a本身的值,因此无论从什么方向看其实都是a本身的加减得到值进行输出的。
从第四个例子看,当将a++,或++a放在最左边的时候是不影响后面a+4的运算的,但放在右边则显然a本身的值改变,增加了一,影响了前面的运算,由此也可证明了括号内的运算是从右向左的;
那么再看前三个例子中第一个printf,首先从右向左进行运算++a同样是对a做加一运算,但是很明显,a并未如同a++一样发生改变,换一种理解方式似乎对于三种情况就能解释的通:对于++a,–a只进行运算,等所有运算结束后在从左向右将得到的结果赋给a;而对于a++,a–则是由于方向原因,从右向左运算后立即对其赋值。这样对第一个例子做出解释:

  • 右边三个++a先进行运算,得到a=6,于是a++中的a为6同时输出后加一为7;
  • a–中输出7,同时进行a减一操作,此时a=6;
  • 由于–a与++a类似只运算不进行赋值,那么a=5;
  • 于是乎第一个a输出5同时做减一操作,此时a=4;
  • 这样对于–a,++a未进行输出的项就将最终结果输出,得到如上的4。

其余两个用这样的理解方式也可解释的通,这样就可以解释所有上述输出结果。

(纯属个人理解观点,如果有误希望大家纠正!)

猜你喜欢

转载自blog.csdn.net/weixin_43361652/article/details/86487744
今日推荐