va list C語言引數列表

2021-06-22 19:58:40 字數 784 閱讀 8810

va_list是乙個巨集,由va_start和va_end界定。

typedef char* va_list;

void va_start ( va_list ap, prev_param );

type va_arg ( va_list ap, type );

void va_end ( va_list ap );

其中,va_list 是乙個字元指標,可以理解為指向當前引數的乙個指標,取參必須通過這個指標進行。

在呼叫參數列之前,應該定義乙個 va_list 型別的變數,以供後用(假設這個 va_list 型別變數被定義為ap);

然後對 ap 進行初始化,讓它指向可變參數列裡面的第乙個引數。這是通過 va_start 來實現的,其第乙個引數是 ap 本身,第二個引數是在變參表前面緊挨著的乙個變數;

然後是獲取引數,呼叫 va_arg。它的第乙個引數是 ap,第二個引數是要獲取的引數的指定型別,並返回這個指定型別的值,同時把 ap 的位置指向變參表的下乙個變數位置;

獲取所有的引數之後,我們有必要將這個 ap 指標關掉,以免發生危險,方法是呼叫 va_end。它是將輸入的引數 ap 置為 null,應該養成獲取完參數列之後關閉指標的習慣。

例子:int max(int n, ...) 

// 定參 n 表示後面變參數量,定界用,輸入時切勿搞錯

va_end(ap); 

// 善後工作,關閉 ap

return maximum;

}// 在主函式中測試 max 函式的行為(c++ 格式)

int main()

valist c語言可變引數巨集

va list 是c語言中解決變參問題的一組巨集。1.api介紹 標頭檔案 cpp view plain copy print?include 下面是實現變參函式的一組巨集 macro cpp view plain copy print?void va start va list ap,last t...

va list C語言中的可變引數

c語言中有些函式使用可變引數,比如常見的int printf const char format,第乙個引數format是固定的,其餘的引數的個數和型別都不固定。但c又無法用面相物件的函式過載的概念。不過好在c語言中定義了va list,va start va arg va end 這樣一組巨集來處...

C語言可變引數列表

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