va_list 简介
va_list?簡介
(2011-04-16 10:31:17) 轉載▼標簽: 雜談 | 分類:c/c 知識 |
va_list是一個宏,由va_start和va_end界定。
??? typedefchar* 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是一個字符指針,可以理解為指向當前參數的一個指針,取參必須通過這個指針進行。
???<Step 1> 在調用參數表之前,應該定義一個 va_list類型的變量,以供后用(假設這個 va_list 類型變量被定義為ap);
???<Step 2> 然后對 ap進行初始化,讓它指向可變參數表里面的第一個參數。這是通過 va_start 來實現的,其第一個參數是 ap本身,第二個參數是在變參表前面緊挨著的一個變量;
???<Step 3> 然后是獲取參數,調用 va_arg。它的第一個參數是ap,第二個參數是要獲取的參數的指定類型,并返回這個指定類型的值,同時把 ap 的位置指向變參表的下一個變量位置;
???<Step 4> 獲取所有的參數之后,我們有必要將這個 ap指針關掉,以免發生危險,方法是調用 va_end。它是將輸入的參數 ap 置為NULL,應該養成獲取完參數表之后關閉指針的習慣。
?
例子:
int max(int n, ...)??// 定參 n表示后面變參數量,定界用,輸入時切勿搞錯
{??????????????????
?va_listap;???????//定義一個 va_list 指針來訪問參數表
?va_start(ap,n);?????//初始化 ap,讓它指向第一個變參
?int maximum =-0x7FFFFFFF;???//這是一個最小的整數
?int temp;
?for(int i = 0; i < n; i++)
?{
??temp = va_arg(ap,int);???// 獲取一個int 型參數,并且 ap 指向下一個參數
??if (maximum <temp)
???maximum =temp;
?}
?va_end(ap);???????//善后工作,關閉 ap
?return maximum;
}
// 在主函數中測試 max 函數的行為(C++ 格式)
int main()
{
?cout << max(3, 10,20, 30) << endl;
?cout << max(6, 20,40, 10, 50, 30, 40) << endl;
}
總結
以上是生活随笔為你收集整理的va_list 简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件如何控制硬件、编译器和操作系统是否需
- 下一篇: 聊聊用于特征处理的tsfresh