當前位置:
首頁 > 最新 > C語言基礎:不定參數

C語言基礎:不定參數

在這一節里我們來學習C語言中另外一個重要的機制,不定參數。不定參數是指函數可以接收不確定個數的參數,不定參數用...來表示,它必須要寫在正常參數表的後面,例如我們熟知的printf函數:

int printf (char *fmt, ...);

printf的第一個參數為char* fmt,後面則是不定參數。它表示可以接收任意個數的參數。我們在調用這樣的函數時可以向其傳與任意個數的參數,例如:

printf("%d %d
", 1, 2);

printf("%f %f %f
", 1.2, 2.3, 3.4);

printf("%d %f %c %s
", 1, 2.3, "A", "Hello World!");

那麼,我們不禁要問,定義了一個不定參數的函數,在函數體內如何確定其形參呢?如何取得傳入參數的值呢?

C語言中提供了一種可以獲取不定參數的辦法,就是用std_arg

先來看看std_arg的使用例子:

#include

#include

int sum(int first, ...)

{

va_list arg_list;

int sum = first;

va_start(arg_list, first);

int var2 = va_arg(arg_list, int);

int var3 = va_arg(arg_list, int);

int var4 = va_arg(arg_list, int);

int var5 = va_arg(arg_list, int);

sum += var2;

sum += var3;

sum += var4;

sum += var5;

va_end(arg_list);

return sum;

}

int main(int argc, char *argv[])

{

printf("%d
", sum(1, 2, 3, 4, 5));

return 0;

}

首先,我們要使用#include 來包含這個使用否定參數的頭文件。然後定義一個int類型的變數,我們需要使用va_start將函數的第一個參數傳遞給arg_list,這樣它都才會知道其後面的不定參數。接下來使用va_arg來取得第二個參數值,在取值時需要將其強制轉化為指定類型的變數。在這裡我們是認為參數的類型均為int型,而通常來說我們可以向printf這樣,將第一個參數做為後續不定參數的類型定義,通過分析fmt字元串中的類型來確定後續不定參數的類型。接下來我們通過va_arg再取得第三個參數、第四個參數和第五個參數。最後使用va_end結束不定參數的使用。

當然,在定義函數和調用函數時我們都必須清楚函數的所有的參數類型,否則arglist將不能正常工作。

關於arglist的原理有興趣的讀者請參見《函數棧幀》。

關注編程外星人

我想加入交流群


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 全球大搜羅 的精彩文章:

文本分析小練手——詞頻雲圖
ndarray的生成、屬性、索引
為了孩子,你應該知道的兒童房設計
王者榮耀:不改掉這些壞習慣,就別怪自己排位連輸!

TAG:全球大搜羅 |