C C語言中 va list 解決變參問題

2021-09-12 12:21:01 字數 834 閱讀 8893

va_list是乙個字元指標,在**中可以理解為指向當前引數的乙個指標,這裡有幾個與va_list相關的常見的函式

void va_start ( va_list ap, param );

//對va_list變數進行初始化,將ap指標指向引數列表中的第乙個引數

type va_arg ( va_list ap, type );

//獲取引數,型別為 type 型別,返回值也為 type 型別

int vsprintf(char *string, char *format, va_list ap);

//將ap(通常是字串) 按format格式寫入字串string中

void va_end ( va_list ap );

//**ap指標

所以解決變參問題就分為四步:

(1)首先在函式裡定義 va_list 型的變數 ap,即指向引數的指標;

(2)然後用 va_start 函式初始化剛定義的 ap 指標;

(3)然後用 va_arg 返回可變的引數即 va_arg(va_list ap, type)

(4)最後用 va_list ** va_end 指標

例子:求多個數的最大值:

#include #include #include int max(int ss, ...)

va_end(ap);

return ret;

}int main()

用va list實現變參函式

va list 是c語言中解決變參問題的一組巨集。1.api介紹 標頭檔案 include下面是實現變參函式的一組巨集 macro void va start va list ap,last type va arg va list ap,type void va end va list ap voi...

C語言中的變參原理

在c c 中,對函式引數的掃瞄是從後向前的。c c 的函式引數是通過壓入堆疊的方式來給函式傳引數的 堆疊是一種先進後出的資料結構 最先壓入的引數最後出來printf的第乙個被找到的引數就是那個字元指標,就是被雙引號括起來的那一部分,函式通過判斷字串裡控制引數的個數來判斷引數個數及資料型別,通過這些就...

C語言中變參函式傳參的實現示例

目錄 近期在看一本書,叫做 嵌入式c語言自我修養 寫的內容對我幫助很大,是一本好書。在第6章 c編譯器擴充套件語法精講一節,這本書給出了一些變參函式的例子 1.變參函式初體驗 include void print num int count,int main void 上面的 很好理解 定義乙個變參...