顧名思義,可變參數函數就是參數數量可變的函數,即函數的參數數量是不確定的,比如方法getnumbertotal()我們即可以傳遞一個參數,也可以傳遞5個、6個參數
1 #include <stdio.h>
2 #include <stdarg.h>//實現可變參數需要的頭文件
3
4 int getnumbertotal(int args,...){//可變參數要放在普通參數(args)的後面;...表示有很多個參數
5 va_list l;//用來保存傳給函數的其他參數
6 va_start(l,args);//表示可變參數的開始,即args參數之後的所有參數
7 int i;
8 int total=0;
9 //逐一讀取可變參數
10 for(i=0;i<args;i++){
11 total+=va_arg(l,int);
12 }
13 va_end(l);//銷毀va_list
14 return total;
15 }
16
17 int main(){
18 int result=getnumbertotal(3,11,15,9);
19 printf("total:%i\n",result);
20 result=getnumbertotal(2,11,9);
21 printf("total:%i\n",result);
22 result=getnumbertotal(5,11,9,5,13,7);
23 printf("total:%i\n",result);
24 return 0;
25 }
使用可變參數必須注意的是: 必須包含一個普通參數
我們可以給va_start()方法傳遞一個NULL,但是需要通過第一個參數知道可變參數的個數
va_arg獲取可變參數的時候必須是對應的類型,否則將會出現不可預知的錯誤