en

hi, it seems you are using microsoft internet explorer. it doesn't match web standard and causes problems browsing this site. please please please use mozilla firefox or google chrome instead. thank you!

zh

哦哦!您正在使用Internet Explorer 瀏覽器,它與我們的網頁標準並不相容,可能會導致畫面顯示不正常。
請改用 Mozilla Firefox 或者 Google Chrome 才能正常瀏覽本網站,謝謝!

3.07.2011

使用 va_list 取得非固定數量的引數

在定義函數時,有的時候無法確定所要接受的參數數量,這時候就可以在函數的引數宣告中使用「...」符號來代表未知的個數,「...」符號必須和其他參數一起使用,並記述在最後面,方法如下。

double average(int sum, ...){
    int count = 1, n = 0; double avg;
    va_list numList;
    va_start(numList, sum);

    while (n = va_arg(numList,int)) {
        sum += n; count ++;
    }

    va_end(numList);
    avg = (double)sum / count;
    return avg;
}

在呼叫函數時,我們使用逗號區隔複數的值,在函式中,除了第一個輸入參數除存在變數 sum中,剩餘的參數皆儲存於我們所定義的 va_list 型態變數 numList 裡,利用 va_arg 指令使numList 內的指標移向下一個儲存變數,以下是呼叫此函式的方法與執行結果。

NSLog(@"average = %.1f", average(3, 6, 9, 11, 13));

想要擷取非固定數量的參數時,就必須配合 va_list 指令來完成,其餘相關指令都被定義在stdarg.h 內,而這些指令在 Apple 的 Developer Documentation 中都有詳細的說明。






沒有留言:

張貼留言