顧名思義,可變參數函數就是參數數量可變的函數,即函數的參數數量是不確定的,比如方法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獲取可變參數的時候必須是對應的類型,否則將會出現不可預知的錯誤