1、C++函數參數入棧順序--從右到左
下面的例子用來驗證C++函數參數入棧順序:
void test(int i1, int i2, int i3)
{
printf(“i1=%d, i2=%d, i3=%d\n“,i1,i2,i3);
}
int i=0;
test(++i,++i,++i);
則輸出結果為:i1=3, i2=2, i3=1
2、一個有趣的小問題--表達式與算符結合順序
在VC論壇里看到有人對下面的表達式計算結果有點迷惑,
int i = 1;
int k = (++i) + (++i)+ (++i);
int i2 = 1;
int k2 = (++i2) + (++i2);
我也測試了一下,很多人一開始會以為 k = 2 + 3 + 4 =9;
但是事實上在VC, DevC++4.9(GCC)里面編譯, 執行結果k=10;
綜合其他人的一些看法和我自己的測試,得出結論:
k= (++i)+(++i)+(++i);//等價于++i,++i,k = i+i + (++i);也就是 k = 3 + 3 + 4 = 10。
因此,k2的結果為6。
當然,這個沒有進行語法上的深層次分析,有興趣的朋友可以自己分析一下C++的相關語法。
(本文是本人以baodi_z的網名原發表于CSDN的個人BLOG,原文發表于 2004年12月06日 11:23 AM )