( 開發可變引數函式
在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 它可以指定格式的輸出,格式化輸出的內容。現在我們先來看看...