可變函式列表解析

2021-08-14 11:20:21 字數 1076 閱讀 7336

可變函式列表解析

c語言中的可變引數是乙個比較有意思的實現,通過將函式實現為可變引數的形式,可以使得函式可以接受1個以上的任意多個函式。

在c語言中printf\scanf等都為支援可變引數的函式,可以有多個引數。

對於可變引數列表,我們可以通過乙個例子來進行深入了解(例如1:實現乙個函式可以求任意個引數的平均值;例如2:使用可變引數,實現函式,求函式引數的最大值):

#include

#include

intmax(

intnum

, ...)  

//第乙個引數是傳的是引數個數,後面三個點表示可變引數列表

} va_end

(arg);    

//巨集 va_end

return

max; }

intmain()

結果截圖:

雖然這個**量不大,但關於可變引數的基本知識點都基本包括,

1)宣告乙個va_list型別的變數arg,它用於訪問引數列表的未確定部分;

2)這個變數是呼叫va_start來初始化。它的第乙個引數是va_list 的變數名,第二個引數是省略號前最後乙個有名字的引數。初始化過程把arg變數設定為指向可變部分的第乙個參。

3)為了訪問引數,需要實驗va_arg,這個巨集接受倆個引數:val_list變數和va_arg...返回這個引數的值,並使用va_rag...指向下乙個可變引數。

4)最後,當訪問完畢最後乙個可變引數之後,我們需要呼叫va_end.

可變引數的限制:

注意:1)可變引數必須從頭到尾逐個訪問。如果你在訪問了幾個可變引數之後想半途終止,這是可以的,但是,如果你想一開始就訪問引數列表中間的引數,那是不行的。

2)引數列表中至少有乙個命名引數。如果連乙個命名引數都沒有,那就無法使用va_start。

3)這些巨集是無法直接判斷實際存在引數的數量。

4)這個巨集無法判斷每個引數的型別。

5)如果在va_arg中指定了錯誤的型別,那麼其後果是不可**的。

可變引數列表解析

c語言中的可變引數是乙個比較有意思的實現,通過將函式實現為可變引數的形式,可以使得函式可以接受1個以上的任意多個引數 不固定 看乙個例子,求取幾個數裡面的最大值。主要 如下 int max int n,va end arg,int return max 關鍵問題是搞懂va list,va start...

可變引數列表解析

在c語言中 有些函式我們無法確定其需要傳遞的引數的個數 可以用省略號指定引數。它是利用函式傳參時的過程實現的,函式傳參過程是以棧的形式訪問的。關於函式棧幀 通過下面的 來演示 include include int add int n,n為後面引數的個數,為可選引數 int main 執行結果 在v...

可變引數列表解析

1 printf d n 2018 2 printf s n hello world 3 printf d s n 2018,i m fine.int printf const char format,1 va list arg 2 void va start va list arg ptr,pre...