C 預設引數的問題,C 中函式預設值的問題

2021-06-25 14:47:35 字數 2102 閱讀 3789

1樓:全康裕

定義函式 void f(int q, int w, int e=0);

e=0 就是預設實參,呼叫函式時f(1,2),這時e=0

後面的是說不能寫成這樣 void f( int q, in w=0, int e);

2樓:匿名使用者

比如一個函式宣告void f(type p1, type p2, type p3, type p4)

如果要使用預設引數可以宣告成void f(type p1, type p2, type p3, type p4=default)

或者void f(type p1, type p2, type p3=default, type p4=default)

以及void f(type p1, type p2=default, type p3=default, type p4=default)

和void f(type p1=default, type p2=default, type p3=default, type p4=default)

但不能宣告成void f(type p1, type p2, type p3=default, type p4)

原因在於:預設引數是可以省略的,所以如果你傳入三個引數,編譯器不知道這到底是省略了一個引數,還是某種錯誤,所以要求所有預設引數必須都要靠右,且在第一個預設引數之後如果還有引數,必須都是預設引數。

在呼叫時一旦一個預設引數被省略,則其之後的所有引數都必須省略,否則會造成編譯系統的混亂,從而造成錯誤的呼叫

3樓:i金你奶奶家

比如說下面的函式

int fun(int a,int b,int c=3)c就是指定的預設實參,通常在函式原型中指定。這裡給了3作為預設引數。用平常的時候呼叫這個函式fun(4,5,6);那麼就是a=4,b=4,c=6。

如果這樣呼叫fun(1,2)那麼就是a=1,b=2,c=3,這裡c沒有指定,因為c是預設實參,已經有了預設值,這裡c就是採用預設值3。

為什麼預設實參必須是函式參數列中最右邊的引數。把上面的函式改下int fun(int a=3,int b,int c){}這樣呼叫fun(1,2),這樣就是a=1,b=2,而c根本就沒有賦到值,就出錯了。這些引數都是一一對應的。

c++中函式預設值的問題

4樓:

" 函式中有多個預設引數,則形參應從最右邊依次向左設定。"

-- 意思是,當第i 個引數有預設值時,

第i +1,i+2,i+3 。。。直到最後一個引數都必須 給預設值。否則語法錯。

void point(int x,int y=0,int z=0); -- 對

void point(int =0,int,int =0); -- 錯

void point(int =0,int =0,int); -- 錯

void point(int ,int,int =0); -- 對

"當呼叫函式時,只能向左匹配引數。" --

如果函式有4個引數,你呼叫時填了兩個,那麼第3和第4個引數用預設值 -- (對的)

如果函式有4個引數,你呼叫時填了3個,那麼第4個引數用預設值。-- (對的)

你不能說,我填2個引數,算第1第3 ,第2和第4個引數用預設值。-- (就錯了)。

5樓:sweet丶奈何

void point(int x=10,y=20); //這句是 宣告

void point(int x=10,y=20) {} //帶函式體沒有分號是定義

所以第一節裡只有宣告沒有定義,函式在呼叫前需要宣告。

但如果在main函式前定義的函式是可以省略宣告直接呼叫的。

簡而言之,就是使用預設引數時是把預設引數寫道宣告裡了,省略宣告時寫到定義裡(其實也就是宣告和定義合二為一了)。

6樓:巫彬計採楓

必須按照引數順序對位入座。你的呼叫相當於把"y"(char)賦給了int。這樣可定是不行的。

7樓:盈彗張繡

函式傳值呼叫時,實際引數作為右表示式想形式引數提供初始值。c++的允許指定引數的預設值,凼函式呼叫中升略預設引數時,預設值自動傳遞被呼叫函式

關於C 函式返回值的問題,C 函式返回值問題

include class test public test int x 0 i x cout 新建的該物件的地址為 test cout 析構地址為 正確輸出,不過你的 確實認人匪姨所思 與實參的問題 以一個簡單的程式為例來說明 void mswapa int a,int b 這 兩個函式都是交換a...

c 函式中的指標引數跟地址引數區別

chat int a chat int a 這兩個函式是完全不同意義的東西,你的理解主要是在int a和int a這個型別上面。要注意int 和int 是兩個完全不同的型別。int 是引用型別,而int 是指向int型別變數的指標型別。void chat int a 呼叫此函式 int x 100 ...

c語言fwrite函式中引數buffer為什麼要用

用陣列名錶示第一個陣列元素的地址,也即陣列的起始地址,對於其他陣列元素,還是需要取地址符的 fwrite函式具體是什麼意思怎麼用各個引數是什麼意思 size t fwrite const void buffer,size t size,size t count,file stream 這是fwrit...