首先,我們需要知道可變引數列表到底是什麼,它又有什麼作用?
一般我們在程式設計的時候,函式中形參的個數通常是確定的,在呼叫時要依次給出與形參對應的實參。但在某些情況下我們希望函式的引數個數可以根據需要確定,因此c語言引入可變引數函式。
因此,它的乙個很重要的作用就是我們可以根據需要來確定形參個數,而不用多次定義不同的函式來呼叫。
對於可變引數列表,我們首先需要了解一些程式設計中會用到的東西。
首先,我們需要用到頭檔案stdarg.h來定義幾個函式
這個是我們的部分程式,其中:
va_list 是用於存放引數列表的資料結構。
va_start 函式根據初始化last來初始化引數列表。
va_arg 函式用於從引數列表中取出乙個引數,引數型別由type指定。
va_end 函式執行清理引數列表的工作。
說明:va_start(itor, unusedint);用於根據unusedint初始化可變引數列表。
va_arg(itor, char *);用於從引數列表中取出乙個引數,其中的char *用於指定所取的引數的型別為字串。每次呼叫va_arg後,引數列表itor都會被更改,以使得下次呼叫時能得到下乙個引數。
va_end(itor);用於對引數列表進行一些清理工作。呼叫完va_end後,itor便不再有效。
下面進入例項,我們先看一段**:
我們可以看到,對於這段**,我們只定義了乙個被呼叫的函式,但是在主函式中,我們用同乙個函式,實現了對三個含有不同引數數量的函式的輸出,這個就是可變引數列表的乙個作用。
然後看另乙個**:
同樣的道理,這次我們輸出的是字串。
以上就是我個人關於可變引數列表的一些理解,歡迎糾錯。 我們共同進步。
可變引數列表
模擬實現printf函式 va list是在c語言中解決變參問題的一組巨集,所在標頭檔案 include 用於獲取不確定個數的引數 va start,函式名稱,讀取可變引數的過程其實就是在堆疊中,使用指標,遍歷堆疊段中的引數列表,從低位址到高位址乙個乙個地把引數內容讀出來的過程 va arg,這個巨...
可變引數列表
小二,上 class a public class varargs two param static void twostringparam string a,string b three param 參照上兩種寫法,一直往後面加。是不是感覺很憂傷 幸好這不是真的。string.a static v...
可變引數列表
測試環境 vs2008 1 可變引數列表 為什麼需要可變引數呢?在函式原型中,列出了函式期望接受的引數,原型只能顯示固定數目的引數,如果函式原型列出的引數與可呼叫引數不匹配或數目不一樣,程式將無法執行。例如,我們想要求一系列值的平均值,這裡的一系列的數目是不確定的,如果這些值儲存於陣列中,這個任務就...