C可變引數的函式

2021-06-16 19:18:27 字數 1285 閱讀 4656

有的時候函式的引數個數在呼叫的時候才確定,這時函式的引數為可變引數

使用可變引數時用到的幾個庫函式:

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,也就是說這個函式可以使用兩個或三個...