C語言函數的可變參數列表


  可變參數列表可通過宏來實現,這些宏定義在stdarg.h頭文件中,它是標准庫的一部分。這個頭文件聲明了一個類型va_list和三個宏----va_start,va_arg,va_end.可以聲明一個類型為va_list的變量,與這幾個宏配合使用,訪問參數的值。參數列表的可變部分位於一個或多個普通參數(命名參數)的后面(即參數列表中至少要有一個命名參數),它在函數原型中以一個省略號表示。

例如:定義一個函數average可以計算若干個整數的平均值:

 1 #include <stdarg.h>
 2 float average(int n_value,...)
 3 {
 4     va_list var_arg;
 5     int count;
 6     float sum=0;
 7 
 8     va_start(var_arg,n_value);
 9 
10     for(count =0;count<n_value;count++)
11     {
12         sum+=va_arg(var_arg,int);
13     }
14 
15     va_end(var_arg);
16     return sum/n_values;
17 }

說明:函數聲明一個名叫va_arg的變量,它用來訪問參數列表的未確定部分。這個變量通過調用va_start來初始化。它的第一個參數是va_list 類型變量的名字,第二個參數是省略號前最后一個有名字的參數。初始化過程把變量var_arg設置為指向可變參數部分的第一個參數。為了訪問參數,需要使用va_arg,這個宏接受兩個參數:va_list類型變量和參數列表中下一個參數的類型。在這個例子中,所有的可變參數都是整型。va_arg返回這個參數的值,並使var_arg指向下一個可變參數。最后,當訪問完畢最后一個可變參數之后,需要調用va_end。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM