在定義函數時,有的時候無法確定所要接受的參數數量,這時候就可以在函數的引數宣告中使用「...」符號來代表未知的個數,「...」符號必須和其他參數一起使用,並記述在最後面,方法如下。
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 中都有詳細的說明。
沒有留言:
張貼留言