溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

詳解可變參數(shù)列表

發(fā)布時間:2020-07-10 20:06:17 來源:網(wǎng)絡(luò) 閱讀:377 作者:寫代碼好累 欄目:編程語言

經(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ù).

向AI問一下細(xì)節(jié)
推薦閱讀:
  1. wsdl詳解
  2. mysql 詳解

免責(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)容。

AI