va_start()va_end()函數(shù)應(yīng)用

字號:

1:當無法列出傳遞函數(shù)的所有實參的類型和數(shù)目時,可用省略號指定參數(shù)表
    void foo(...);
    void foo(parm_list,...);
    2:函數(shù)參數(shù)的傳遞原理
    函數(shù)參數(shù)是以數(shù)據(jù)結(jié)構(gòu):棧的形式存取,從右至左入棧.eg:
    #include
    void fun(int a, ...)
    {
    int *temp = &a;
    temp++;
    for (int i = 0; i < a; ++i)
    {
    cout << *temp << endl;
    temp++;
    }
    }
    int main()
    {
    int a = 1;
    int b = 2;
    int c = 3;
    int d = 4;
    fun(4, a, b, c, d);
    system("pause");
    return 0;
    }
    Output::
    1
    2
    3
    4
    3:獲取省略號指定的參數(shù)
    在函數(shù)體中聲明一個va_list,然后用va_start函數(shù)來獲取參數(shù)列表中的參數(shù),使用完畢后調(diào)用va_end()結(jié)束。像這段代碼:
    void TestFun(char* pszDest, int DestLen, const char* pszFormat, ...)
    {
    va_list args;
    va_start(args, pszFormat);
    _vsnprintf(pszDest, DestLen, pszFormat, args);
    va_end(args);
    }