1. 程式人生 > >C語言printf中的自增自減執行

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

執行結果