c語言可變參函式之引數指標的使用

2021-10-12 17:29:22 字數 998 閱讀 3341

c語言中的可變參函式的定義,在這就不多贅述了。在檢視c語言資料時,發現了乙個博主的文章挺不錯,很詳細,也很流暢。但在可變參函式的例子中,發現結果錯的,經過查詢其他資料,寫了乙個執行結果正確的例子,特此記錄一下。

利用可變參函式,實現多個值的加和,直接上經我驗證的**:

/**

* 計算可選引數之和

* * 可變參函式

* count 為輸入的資料個數 -- 為強制引數

* * 可變引數函式要獲取可選引數時,必須通過乙個型別為 va_list 的物件,它包含了引數資訊。此物件也叫引數指標。

* 它包含了棧中至少乙個引數的位置,可以使用這個引數指標從乙個可選引數移動到下乙個可選引數,由此,可以獲取所有的可選引數。

* * 可以用 4 個巨集來處理該引數指標,va_start、va_arg、va_end、va_copy。這些巨集及 va_list 型別都被定義在標頭檔案 stdarg.h 中。

* * va_start 使用函式中的強制引數(即第乙個)來初始化引數指標;必須先呼叫該巨集,才可以開始使用可選引數;

* va_arg 的第二個引數是被讀入的引數的型別。會得到當前引數指標所引用的可選引數,也會將引數指標移動到引數列表中的下乙個引數。

* va_copy 使用當前的 src 值來初始化引數指標 dest。然後就可以使用 dest 中的備份獲取可選引數列表,從 src 所引用的位置開始。

* va_end 當不再需要引數指標時,必須呼叫巨集 va_end。如果想使用 va_start 或 va_copy 來重新初始化乙個之前用過的引數指標,也必須先呼叫 va_end。

C語言的可變參函式

可變參函式,顧其名而思義,就是該函式的引數數目不固定,例如我們的格式化輸出函式 int printf const char fmt,這個函式的 引數就代表它是個可變參的函式。這個函式第乙個引數一定是乙個字串,通過字串中的 d s 等等來對應後面的引數數量,這樣以來就可以正確解析函式的引數。實現可變參...

C語言可變參函式的實現

函式是大多數程式語言都實現的程式設計要素,呼叫函式的實現原理就是 執行跳轉 引數傳遞。對於執行跳轉,所有的cpu都直接提供跳轉指令 對於引數傳遞,cpu會提供多種方式,最常見的方式就是利用棧來傳遞引數。c語言標準實現了函式呼叫,但是卻沒有限定實現細節,不同的c編譯器廠商可以根據底層硬體環境自行確定實...

C語言函式可變引數

翻apue的時候,看到了一組可變引數的巨集就是va list 類似 void print arg int count,1 va list變數 ifdef m alpha typedef struct va list else typedef char va list 這個 endif 2 intsi...