C語言 使用stdarg h實現函式可變引數

2021-09-24 18:24:04 字數 858 閱讀 3951

本文有部分的理解借鑑於

首先引入標頭檔案:

#include
需要可變的引數列表要用…來代替。

例如: int add(int num, int num2, …)

在stdarg.h標頭檔案中定義了va_list型別,用於遍歷引數列表的引數。

void va_start(va_list ap, last);
↑ 該函式用於初始化va_list型別的物件,引數2 last 表示的是函式中已知型別的最後乙個引數的名字,ap會指向last的位址。

該函式會把讀取的引數列表的首位址放到ap上,ap其實可以理解成乙個stl裡面的迭代器。

type va_arg(va_list ap, type);
↑ 該函式用於從ap上讀取引數,每執行一次,那麼ap指向的引數列表首位址就會指向下乙個引數

例如: int getchar(int num,char str,char buf);

如果第一次ap會指向char str,當執行一次 type va_arg(va_list ap, type); 的時候,ap會指向char buf;

引數2的 type是該函式返回的變數型別。

void va_end(va_list ap);
↑ 該函式用於釋放ap的記憶體空間。

例子:

#include#includeint add(int num, int num2, ...)

va_end(arg);

return c; }

void main()

C語言可變引數stdarg h

title date br description c語言可變引數stdarg.h 2020 04 14 03 54 25 0700 可變引數 c語言 stdarg.h中提供了可變引數的寫法 這種函式的原型應該有乙個形參列表,其中至少有乙個形參和乙個省略號,比如,省略號必須是最後乙個引數,省略號的前...

C語言 實現memcopy memmove函式

memmove用於從src拷貝count個字元到dest,如果目標區域和源區域有重疊的話,memmove能夠保證源串在被覆蓋之前將重疊區域的位元組拷貝到目標區域中。但複製後src內容會被更改。但是當目標區域與源區域沒有重疊則和memcpy函式功能相同。include include include ...

C語言函式可變引數總結 stdarg h

stdarg.h標頭檔案中定義了一系列巨集以及資料物件,用於支援可變引數的函式。主要有 va list 定義的資料物件 用於存放可變引數列表 省略號部分 代表的參量 va start ap,v 用於將可變引數列表中第乙個參量的位址複製給va list定義的資料物件 va arg ap,t 用於訪問可...