省略符形參

2022-09-02 08:21:10 字數 942 閱讀 7957

在c++  primer

書上看到標題為「含有可變形參的函式」的章節,內容如下: 

省略符形參有下列兩種形式: 

void foo ( parm_list , ...); 

void foo ( ... ); 

第一種形式為特定數目的形參提供了宣告。在這種情況下,當函式被呼叫時,對於與顯示宣告的形參相對應的實參進行型別檢查,而對於與省略符對應的實參則暫停型別檢查。在第一鐘形式中,形參宣告後面的逗號是可選的。

答:你可以傳遞任意數量的引數給他,所以當然跟沒有引數的函式有區別了(沒有引數的函式,你是不可以給他傳遞任何引數的)。 

樓主提醒一點:省略號的優先級別最低,所以在函式解析時,只有當其它所有的函式都無法呼叫時,編譯器才會考慮呼叫省略號函式的。 

#include

#include

void argfunc(const char *str, ... ) 

void main() 

對於void argfunc(const char *str, ...): 

首先,如果要處理不定引數的函式要包含標頭檔案:#include

然後在處理不定引數的函式中先定義乙個引數列表變數:va_list ap; 

第二步:確定不定引數所在的位置。在這裡,第乙個引數為str,因此要從第二個引數進行獲取引數列表。va_start(ap, str);表示在str引數之後獲取引數。由於c呼叫是從右到左依次將引數壓入堆疊的,因此處理起來比較容易。 

第三步:獲取引數並指明型別,如:va_arg(ap, char*);獲取第乙個引數,並指明型別為char* 

在main()函式中就對應著實參"hello";va_arg(ap, int);緊接著再取乙個引數,並指明型別為int,對應main()函式中的實參345;va_arg(ap, double);再接著取第三個引數,並指明型別為double,對應main()中的實參788.234

非引用形參VS指標形參VS引用形參

一 非引用形參 voidadd1 intv1 這是最普通的形參方式,當函式被呼叫時,呼叫拷貝建構函式,生產乙個新的例項,函式所有的修改,都是對新的例項的修改 函式退出之前,會呼叫析構函式,資源。二 指標形參 voidadd2 int p 使用指標做為函式的形參,同樣指標的值 指標的位址 不會因為 p...

引用形參 指標形參的使用

引用形參 指標形參可以改變主函式內的實參值 includeusing std cin using std cout using std endl 形參其實是在把實參傳遞給子函式的時候定義了乙個新的變數,但是這個變數的值和實參相等,所以在子函式裡無論怎麼修改都不會影響到呼叫它的函式的實參的值 int ...

函式引數 普通形參和引用形參

在呼叫函式時候,引用形參和普通型參是有著很大的區別。首先看函式在使用普通型參時候,編譯器是怎麼工作的。在函式呼叫的時候,編譯器為被調函式在棧空間申請一塊記憶體,此時普通形參也在這塊記憶體取,被實參初始化。說到這裡就明白了,在被調函式執行完畢後,編譯器會將其彈出棧空間。因此,形參也就消失了,此時主函式...