C语言printf中的自增自减运行
源程序
int main()
{
int i = 0;
printf("%d,%d,%d\n",i++,--i,i++);
return 0;
}
我们预期的结果应该是:0,0,0
但实际结果为:0,1,0
原理我也弄得不是很明白,我借鉴了几篇文章,理解到了计算的方法。
大家都知道printf里面的计算是从右至左的,输出是从左至右。先运算这些i++,--i,i++等之类的计算。
我现在来讲讲刚才那个计算吧,第一步,i++(运算符号在变量后面的,就是输出计算时变量的值,这里输出i,所以输出0。),计算过后i=1。第二步,--i(运算符号在变量前面的,在这里输出i的最终值,即执行完printf里面所有运算后的变量值)。计算过后i=0,第三步,i++,同理第一步。计算过后i=1;所以输出的值为 0,1,0。
简单来说,先算后用的,输出最终的变量值。先用后算的,输出当时的变量值。
验证代码
通过以上的方法计算,得出的结果和运算结果一致。
#include<stdio.h>
int main()
{
int i;
// EX1
i = 1;
printf("%d %d %d %d %d %d\n",i,i++,i,--i,++i,i);
fflush(stdout);
printf("%d\n",i);
fflush(stdout);
//EX2
i = 1;
printf("%d %d %d %d %d %d %d\n",i,i++,i++,i,--i,++i,i);
fflush(stdout);
printf("%d\n",i);
fflush(stdout);
//EX3
i = 1;
printf("%d %d %d %d %d %d\n",i,i--,i,--i,++i,i);
fflush(stdout);
printf("%d\n",i);
return 0;
}
运行结果