printf()函数压栈a++与++a的输出

printf()中a++与++a的输出问题

在C语言中有个很常用的函数printf(),使用时从右向左压栈,也就是说在printf("%d %d %d %d\n",a,a++,++a,++a)中,依次从右向左开始计算,计算完后才会往%d中输出,因为有多条赋值语句,所以他是个累加过程,直到压栈结束后输出最终得累加值
下面是几组测试样例:

int a;
 a=1;      printf("%d %d %d %d\n",a,a++,++a,++a);  //4 3 4 4
 a=1;      printf("%d %d %d %d\n",++a,a++,++a,a);  //4 2 4 4
 a=1;      printf("%d %d %d %d\n",++a,a,a++,++a);  //4 4 2 4
 a=1;      printf("%d %d %d %d\n",a++,a++,++a,a++);  //4 3 5 1

在这里面有一个a++,和++a两种赋值的语句,它们在printf()中输出时需要注意一下
a++我们都知道是先使用后加一的,那么在printf("%d %d %d %d\n",a,a++,++a,++a);这里也是一样的,从右向左依次计算值,我们先假设把累加数值暂存在t中,则从右向左依次为
int a=1;

> 1.++a    	a自增1               t=2 
> 2.++a     a自增1               t=3
> 3.a++    先使用再自增1 输出3    t=4
> 4.a       不改变               t=4

所有的a++与a的值都按最终的t输出,所以输出为4 3 4 4

只要遇到a++这种先使用在变化的量优先输出。

再比如a=10; printf("%d %d %d %d\n",a,a++,++a,++a);代码
在这里插入图片描述
因此输出结果为13 12 13 13

以上就是我总结的判断在printf()中a++与++a的输出问题。
最后再补上一组测试用例:

int a;
 a=10;      printf("%d %d %d %d\n",a--,a++,++a,--a);  
 a=10;      printf("%d %d %d %d\n",++a,a++,a,a--);  
 a=10;      printf("%d %d %d %d\n",a++,a--,a++,++a);  
 a=10;      printf("%d %d %d %d\n",a++,a,++a,a++);  

输出结果分别为

//11 10 10 10
//11 9 11 10
//11 12 11 12
//12 13 13 10

最后说明一下因为目前博主只是小菜鸟一枚,很多东西都不懂,只是随便写写,希望我写的这篇文章对你能有帮助。

猜你喜欢

转载自blog.csdn.net/weixin_43919932/article/details/88544728
今日推荐