printf()中a++与++a的输出问题
在C语言中有个很常用的函数printf(),使用时从右向左压栈,也就是说在printf("%d %d %d %d
",a,a++,++a,++a)
中,依次从右向左开始计算,计算完后才会往%d中输出,因为有多条赋值语句,所以他是个累加过程,直到压栈结束后输出最终得累加值
下面是几组测试样例:
int a;
a=1; printf("%d %d %d %d
",a,a++,++a,++a); //4 3 4 4
a=1; printf("%d %d %d %d
",++a,a++,++a,a); //4 2 4 4
a=1; printf("%d %d %d %d
",++a,a,a++,++a); //4 4 2 4
a=1; printf("%d %d %d %d
",a++,a++,++a,a++); //4 3 5 1
在这里面有一个a++,和++a两种赋值的语句,它们在printf()中输出时需要注意一下
a++我们都知道是先使用后加一的,那么在printf("%d %d %d %d
",a,a++,++a,++a);
这里也是一样的,从右向左依次计算值,我们先假设把累加数值暂存在t中,则从右向左依次为
int a=1;
++a a自增1 t=2
++a a自增1 t=3
a++ 先使用(输出3)再自增1 t=4
a 不改变 t=4
所有的a++与a的值都按最终的t输出,所以输出为4 3 4 4
只要遇到a++这种先使用在变化的量优先输出。
再比如a=10; printf("%d %d %d %d
",a,a++,++a,++a);
代码
因此输出结果为13 12 13 13
以上就是我总结的判断在printf()中a++与++a的输出问题。
最后再补上一组测试用例:
int a;
a=10; printf("%d %d %d %d
",a--,a++,++a,--a);
a=10; printf("%d %d %d %d
",++a,a++,a,a--);
a=10; printf("%d %d %d %d
",a++,a--,a++,++a);
a=10; printf("%d %d %d %d
",a++,a,++a,a++);
输出结果分别为
//11 10 10 10
//11 9 11 10
//11 12 11 12
//12 13 13 10
最后说明一下因为目前博主只是小菜鸟一枚,很多东西都不懂,只是随便写写,希望我写的这篇文章对你能有帮助。