
函數的參數數量也可以不固定,這是在參數列裡利用 ... 構成可變參數 (variadic arguments) ,舉例如下
| 001 | #include <iostream> |
| 002 | #include <cstdarg> |
| 003 | |
| 004 | int sum(int n_args, ...) { |
| 005 | va_list ap; |
| 006 | va_start(ap, n_args); |
| 007 | int sum = va_arg(ap, int); |
| 008 | for (int i = 2; i <= n_args; i++) { |
| 009 | sum += va_arg(ap, int); |
| 010 | } |
| 011 | va_end(ap); |
| 012 | |
| 013 | return sum; |
| 014 | } |
| 015 | |
| 016 | int main() { |
| 017 | std::cout << sum(3, 11, 22, 33) |
| 018 | << std::endl; |
| 019 | std::cout << sum(3, 19, 20, 21) |
| 020 | << std::endl; |
| 021 | std::cout << sum(3, 3, 65, 101) |
| 022 | << std::endl; |
| 023 | |
| 024 | return 0; |
| 025 | } |
| 026 | |
| 027 | /* Kaiching Chang |
| 028 | u0805.cpp |
| 029 | 2014-02 */ |
此例的 sum() 用來計算參數的總和,除了第一個參數 n_args 為計算總和的數量之外,其他的參數都會被累加起來,結果回傳為整數
| 004 | int sum(int n_args, ...) { |
| 005 | va_list ap; |
| 006 | va_start(ap, n_args); |
| 007 | int sum = va_arg(ap, int); |
| 008 | for (int i = 2; i <= n_args; i++) { |
| 009 | sum += va_arg(ap, int); |
| 010 | } |
| 011 | va_end(ap); |
| 012 | |
| 013 | return sum; |
| 014 | } |
這裡借助標準程式庫中 cstdarg 的幾個函數取得可變參數值。
編譯執行,結果如下
| $ g++ u0805.cpp |
| $ ./a.out |
| 66 |
| 60 |
| 169 |
| $ |
continue ...
沒有留言:
張貼留言