函數的參數數量也可以不固定,這是在參數列裡利用 ... 構成可變參數 (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 ...
沒有留言:
張貼留言