關於C語言中printf函式的引數執行順序
阿新 • • 發佈:2019-02-08
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???*/