有的時候函式的引數個數在呼叫的時候才確定,這時函式的引數為可變引數
使用可變引數時用到的幾個庫函式:
void va_start( va_list arg_ptr, prev_param );
type va_arg( va_list arg_ptr, type );
void va_end( va_list arg_ptr );
va_list:用來儲存巨集va_start、va_arg和va_end所需資訊的一種型別。為了訪問變長引數列表中的引數,必須宣告
va_list型別的乙個物件 定義: typedef char * va_list;
va_start:訪問變長引數列表中的引數之前使用的巨集,它初始化用va_list宣告的物件,初始化結果供巨集va_arg和
va_end使用;
va_arg: 展開成乙個表示式的巨集,該表示式具有變長引數列表中下乙個引數的值和型別。每次呼叫va_arg都會修改
用va_list宣告的物件,從而使該物件指向引數列表中的下乙個引數;
va_end:該巨集使程式能夠從變長引數列表用巨集va_start引用的函式中正常返回。
這三個庫函式和變數va_list型別定義在c庫:《stdarg.h>中定義
使用的基本格式為:
//包含標頭檔案
#include
//可變引數函式定義時的可變引數用「...」表示
int func(int cnt, ...)
//結束可變引數獲取
va_end(var_arg);
/*函式的處理*/
return 0;
}示例程式:
#include
#include
//可變引數函式定義時的可變引數用「...」表示
int func(int cnt, ...)
//結束可變引數獲取
va_end(var_arg);
return 0;
}int main(int agc, char **argv)
執行結果:
------call func with 3 arguments------
hello variable argument 1
hello variable argument 2
------call func with 4 arguments------
hello variable argument 1
hello variable argument 2
hello variable argument 3
C 引數可變函式
前幾天突然想到,c 中有關不定引數的函式平時沒有用過,查了一下該怎麼寫,記錄下來以免以後忘記。int sum int count,int sum 0 va list args va start args,count for int i 0 i其中,第乙個引數count表示後面引數個數,可以理解為 代...
C語言的可變引數函式
open函式有兩種宣告 int open const char pathname,int flags int open const char pathname,int flags,mode t mode 疑問 c語言不支援函式過載,怎麼可以乙個函式名字有兩種引數列表呢?在中,這樣宣告 int ope...
c語言函式的可變引數
在c語言中,有乙個方法可以使用可變引數,可變引數是指,函式的有一些引數不是必要的。一些程式語言中,這些引數通常有一些預設值。比如c 中的可變引數 int myfunc int a,int b,int ab 0 else 在myfunc函式頭中ab引數有乙個預設值0,也就是說這個函式可以使用兩個或三個...