C语言中printf("%d,%d",++a,a++)的输出问题
C语言中常用输出函数printf(), 使用时自右向左入栈, 入栈的同时进行计算, 计算后才会在%d中输出.
int a=1;
printf("%d,%d,%d,%d\n",++a,a--,a++,a); //2,2,1,2
int b=5;
printf("%d,%d,%d,%d\n",b++,++b,b,b--); //5,6,6,5
int c=10;
printf("%d,%d,%d,%d,%d\n",c++,c--,++c,c,--c); //9,10,10,10,10
int d=0;
printf("%d,%d,%d,%d\n",--d,d--,d++,d--); //-2,0,-1,0
int e=0;
printf("%d,%d,%d,%d,%d\n",e=80,--e,++e,++e,++e); //80,80,80,80,80
++a,–a直接在真值上进行+1-1,而a++,a–会先将自己原本的值存在副本中,然后在真值上+1-1.
最后输出时++a,–a输出真值,a++,a–输出副本值.值得注意的是在最后输出时,输出的真值以最后一个入栈的为准.
我们拿第一个来举例
a=1
++a 2
a-- 1 2
a++ 2 1
a 1 //以最后入栈的++a为准
真值 副本
所以输出的是2212,而不是2211.