1. 程式人生 > >關於C語言中printf函式的引數執行順序

關於C語言中printf函式的引數執行順序

RT...看到有類似的題目,說是從右到左,,

藍後在VS2012中寫了如下的程式碼...但是執行出來的結果如下,,

這是為啥...  留一疑惑在這先.

ok,這裡有了一個解釋:
i++會建立一個拷貝 %d取值輸出,引數的傳遞是從右到左壓入棧,所以從右邊開始,i++,此時拷貝i=2 ,然後i+1=3,到左側i=3但此時並不出輸出,繼續其他的運算,++i,得到i=4,此時仍不輸出,到i++,記錄拷貝為4,計算後得到i=5。所有運算完成,開始輸出,從左往右為4(拷貝),5,5,2(拷貝)。
這裡++i,和i輸出一樣是因為兩者定址一樣

--------------------------------------------------------------------------------------
以上,來自某同學的解釋

/* test the execution order of arguments of function printf */
#include <stdio.h>
#include <stdlib.h>
void senario1(void);
void senario2(void);
int main()
{
	senario1();
	senario2();
	system("pause");
	return 0;
}

void senario1()
{
	int i = 2;
	
        printf("%d %d %d %d",i++,++i,i,i++);
}
void senario2()
{
	int i = 2;
	printf("%d ",i++);
	printf("%d ",i);
	printf("%d ",++i);	
	printf("%d",i++);
}
/* The result is 4 5 5 2 ,2 3 4 4 why the first senario shows this result???*/