變參與不定引數

2021-07-08 12:06:34 字數 921 閱讀 8801

今天在重新溫習c語言的視窗設計時看到了這樣的乙個知識:va_list

好奇之下檢視了它的定義:

typedef char *  va_list;
原來是巨集定義的字串指標!且標頭檔案在stdarg.h中。

接下來我往下看,發現還有三個成員:va_start,va_arg,va_end

#define va_start(ap,v)  ( ap = (va_list)&v + _intsizeof(v) )

#define va_arg(ap,t) ( *(t *)((ap += _intsizeof(t)) - _intsizeof(t)) )

#define va_end(ap) ( ap = (va_list)0 )

首先先要定義乙個va_list的變數

va_list szlist;

va_start(ap,v):其中ap就是定義的va_list的變數,也就是進行初始化。

va_arg(ap,t):其中t就是第乙個可變引數之前的乙個引數。每次返回引數後指標向後移送t型別的最小整數倍。

va_end(ap):這個就不用說了,就是清空引數列表。

後來我開始嘗試這個巨集的用法。

#include #include void mylist(char* temp2,char * temp,...)

va_end(szlist);

return;

}int main()

之所以有兩個字串變數,是因為我進行了一次實驗,把mylist中的temp全部換成temp2,(也就是在va_arg中把引數提前一位看看是什麼效果。)最後結果果然是從第乙個引數位址往後運算。

c 不定引數

va list vlist va start vlist,pszformat pszformat 表示 的前乙個引數 va end vlist 其中 typedef char va list define va start crt va start define va arg crt va arg ...

不定引數函式

引數的儲存位置 實參在傳遞值時,給形參申請空間並賦值,其形參在位址上形參的位址是相鄰的 根據編譯器和系統環境可能會有所不同 a b 4 sizeof int 乙個int位元組 int func int a,int b 正如上文所說,如果每次通過p 定址,程式的不具有良好的可移植性。c語言有乙個標頭檔...

Golang 不定引數

下面舉例說明不定引數的使用。不定引數必須是最後乙個引數。arm.go package main import fmt func main 不定引數是同乙個型別的情況 func manyparam1 args int 前面引數固定,後面引數不定的情況 func manyparam2 s string,...