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