您好,登錄后才能下訂單哦!
經過一段時間的C語言學習,開始對printf函數產生了好奇,它可以接受不確定數目的參數。我們來看一下他的函數原型:
int printf(const char*format,...)
這個其實就是可變參數,我們來看看它的源代碼:
int printf(const char*format,...) { int res; va_list(arg); va_start(arg,format); res=vprintf(format,arg); va_end(arg); return res; }
其實他只是簡單的調用vprintf而已。
我們用一個簡單的例子來理解一下。
求平均數函數的實現。
int average(int val,...) { int i=0; int sum=0; va_list arg; //這個就是 char*的意思 va_start(arg,val); for(i=0;i<val;i++) { sum+=va_arg(arg,int); } va_end(arg); return sum/val; }
函數中,va_arg(arg,int)的作用就是拿到下一個參數的值。
從函數的實現可以看到,我們使用可變參數應該有以下步驟:
1)首先在函數里定義一個va_list型的變量,這里是arg,這個變
量是指向參數的指針.
2)然后用va_start宏初始化變量arg,這個宏的第二個參數是第
一個可變參數的前一個參數,是一個固定的參數.
3)然后用va_arg返回可變的參數,并賦值. va_arg的第二個
參數是你要返回的參數的類型,這里是int型.
4)最后用va_end宏結束可變參數的獲取.然后你就可以在函數里使
用第二個參數了.如果函數有多個可變參數的,依次調用va_arg獲
取各個參數.
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。