開發可變引數函式

2021-06-22 23:55:16 字數 1268 閱讀 8701

(             開發可變引數函式

在c語言中,可變引數的函式極其常見,如常用的printf()。可變引數函式的一般形式如下:

返回值型別 函式名(型別1 引數1,型別2 引數2,...型別n 引數n,...);
如上所示,這是乙個典型的可變引數樣式,它共有n個確定的引數,最後的...表示可變引數的含義。必須指出...必須位於最後,並且它至少要有乙個確定的引數,原因後面陳述。

為了開發可變引數的函式,需用到頭檔案stdarg.h。下面共給出兩個例項,在例項中詳細解釋用法。一是求可變個整數的和;二是模仿printf函式。

例項一:求可變個整數的和

#include#include#include/*

對可變個引數求和

count是可變個引數的個數

*/int sum(int count, ...)

return sum;

}int main()

執行    15

在sum中共用到了va_list型別,va_start()、va_arg()和va_end()巨集。

其中,va_list就是char*型別,故直接使用char*,也是可以的。但推薦使用va_list,這樣更能表達含義。va_start()、va_arg()和va_end()都是在stdarg.h中定義的巨集。va_start()的作用是使va_list型的變數指向第乙個可變引數,故需要使用到離...最近的乙個固定的確定的引數,這就是在設計可變引數函式時至少需要乙個確定引數的原因。它的真實原因與函式的引數在記憶體中的分布有關:

顯然,由最後乙個引數的位址,可以確定第乙個可變引數的位址。接著使用va_arg(pdata, int),不斷解析pdata指向記憶體區域,且要指明用何種方式解析,這是va_arg()第二個引數的作用,解析完後,pdata指向下乙個可變引數的位址。由此即可得到所有的可變引數的值。

例項二,模擬printf()函式

#include#include#include/*

簡單模擬printf()函式

format是輸出格式字串

*/int iprintf(char *format,...)

count++;

} va_end(p);

return count;

}int main()

ios開發 Object C可變引數函式

簡介 乙個可變引數函式是指乙個函式擁有不定的引數,即為乙個函式可接收多個引數。有時我們會遇到一些算術問題需要用到,比如是計算傳入引數的總和,字串的連線或是其它操作過程,我們在 oc 裡也經常使用,最經典的就是 nslog c 為 printf 它可以指定格式的輸出,格式化輸出的內容。現在我們先來看看...

ios開發 Object C可變引數函式

簡介 乙個可變引數函式是指乙個函式擁有不定的引數,即為乙個函式可接收多個引數。有時我們會遇到一些算術問題需要用到,比如是計算傳入引數的總和,字串的連線或是其它操作過程,我們在 oc 裡也經常使用,最經典的就是 nslog c 為 printf 它可以指定格式的輸出,格式化輸出的內容。現在我們先來看看...

iOS開發 Object C可變引數函式

簡介 乙個可變引數函式是指乙個函式擁有不定的引數,即為乙個函式可接收多個引數。有時我們會遇到一些算術問題需要用到,比如是計算傳入引數的總和,字串的連線或是其它操作過程,我們在 oc 裡也經常使用,最經典的就是 nslog c 為 printf 它可以指定格式的輸出,格式化輸出的內容。現在我們先來看看...