C語言可變引數列表

2021-08-04 20:11:09 字數 1333 閱讀 8192

c語言中類似於printf這種型別的函式,在呼叫它們時我們傳入的引數的型別和數量都不是固定的,這就需要可變引數列表,要使用可變引數列表,要用到以下幾種巨集。

#include void va_start(va_list ap, last);

type va_arg(va_list ap, type);

void va_end(va_list ap);

void va_copy(va_list dest, va_list src);

先來看一下用法:

#include 

#include

int add(int num,...)

int main()

使用可變引數列表有以下幾步:

1、首先宣告乙個 va_list 型別的變數ap,ap將會在 va_start() , va_arg() , va_end() 中用到。

2、va_start() 初始化變數ap,為後續 使用 va_arg() , va_end()做準備,這個巨集必須被首先呼叫,第二個引數last 為函式入參中緊挨可變引數列表的那個引數。

3、va_arg() 依次取出引數列表中的引數,第二個引數為要取出引數的型別。

4、va_end() 與 va_start() 一一對應,表示可變引數列表的結束,在va_end()之後 使用 va_arg() 可能會引發一些未定義的行為。

下面這個例子在乙個函式中多次使用可變引數列表:

#include 

#include

void print(int num,...)

puts("");

va_end(li);

va_start(li,num);

for(i=0;iprintf("%d ",va_arg(li,int));

}puts("");

va_end(li);

}int main()

使用多個var_start,var_end相配合,可以對引數列表進行次遍歷。

va_copy() 可以複製乙個va_list變數:

#include 

#include

void print(int num,...)

puts("");

va_end(li);

for(i=0;iprintf("%d ",va_arg(li_copy,int));

}puts("");

va_end(li_copy);

}int main()

(C語言)可變引數列表

c函式要在程式中用到以下這些巨集 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和v...

C語言可變引數列表 1

嘗試使用c語言可變引數列表 對於一些函式有的時候,我們不希望它只能傳遞固定引數,例如如果我們想計算2個整數數之和寫乙個int sum int int 的函式,但是如果想計算3個數之和呢?n個數之和呢?不可能去定義無限多個函式,也不能讓函式的引數太多,形如int sum int int int int...

C語言細節 可變引數列表

使用示例 標頭檔案引用 為了使用可變引數列表,你需要新增標準庫中的 stdarg.h 標頭檔案中定義的乙個型別和三個巨集 va listtypedef char va list va variable argument va start define va start ap,lastarg ap c...