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;
}

运行结果