| 巨集 | 用途 |
|---|---|
| `va_list ap` | 宣告參數列表遍歷器 |
| `va_start(ap, last_fixed)` | 初始化指向第一個可變參數 |
| `va_arg(ap, type)` | 取得目前參數並推進 |
| `va_end(ap)` | 結束遍歷 |
#includeint average(int count, ...) { va_list ap; va_start(ap, count); int sum = 0; for (int i = 0; i < count; i++) sum += va_arg(ap, int); va_end(ap); return sum / count; // 整數除法,若需精確請回傳 double } // 使用範例 int main() { printf("Avg of 1,2,3,4,5 = %d\n", average(5, 1,2,3,4,5)); // 3 printf("Avg of 10,20,30 = %d\n", average(3, 10,20,30)); // 20 return 0; }
double average_d(int count, ...) {
va_list ap;
va_start(ap, count);
double sum = 0;
for (int i = 0; i < count; i++)
sum += va_arg(ap, double); // 注意:double
va_end(ap);
return sum / count;
}
可變參數是 C 語言實現 `printf`、`scanf`、`execl` 等函式的基石。掌握 `va_list` 四巨集操作、預設參數提升規則、參數個數傳遞協定,即可撰寫靈活的工具函式。本文以平均值為例,展示最核心的用法模式。