C 函式引數預設值

2021-10-24 11:58:02 字數 1853 閱讀 1174

函式引數在有預設值時,如果呼叫時沒有傳參,則預設push預設值。

例項一:不帶預設值

#include

using

namespace std;

intfun

(int a,

int b,

int c)

;int

main()

intfun

(int a,

int b,

int c)

例項二:函式宣告與定義衝突

函式的預設值在宣告時,同乙個引數不能重複賦值。如以下例項:

int

fun1

(int a,

int b,

int c =

100)

;//定義時 c = 100,

intmain()

intfun1

(int a,

int b,

int c =

100)

// c = 100 預設引數重定義

在例中,引數c進行了重複賦值,編譯器在編譯時給出報錯資訊為:「重定義預設引數: 引數 1」。

原因分析:函式的宣告和定義都會產生函式符號,且函式符號相同。在進行預設引數賦值時,宣告點和定義點的引數列表中的引數只需要(且只能)賦值一次,因為如果兩次賦值的值不同,編譯器就無法判斷該使用哪乙個值作為預設值使用。

例項三:宣告點和定義點同時賦值

函式的預設引數只支援呼叫方(main)可見的引數列表中的引數,如:本例中在主函式之上宣告或定義的fun2()

#include

using

namespace std;

intfun2

(int a,

int b,

int c =

100)

;//定義時 b = 100,支援預設一位引數

intmain()

intfun2

(int a,

int b =

100,

int c)

//編譯通過,但 b 的預設賦值無用

例項四:多個宣告中連續賦值

函式的宣告可以有多個,可以在宣告中遵循從右向左連續賦值。如下例項:

#include

using

namespace std;

intfun3

(int a,

int b,

int c =

100)

;int

fun3

(int a,

int b =

100,

int c)

;int

main()

intfun3

(int a,

int b,

int c)

需要注意的是,例項二在呼叫點是已傳入實參,且傳入的實參(預設引數)在跳轉到函式主體時發現與函式主體中的預設引數存在重複定義,從而引發報錯。

而例項三中,在呼叫點傳參時參照fun3()的宣告,只有乙個預設引數,並且在傳參後跳轉到函式主體的過程中沒有發現同乙個預設引數的重定義,因此例項三沒有報錯,但也因此例項三在函式主體中的預設引數失效(如果傳入引數,使用傳入的引數,否則使用預設預設值)。

函式(引數,預設值)

js定義函式引數沒有非常嚴格的要求,可以有也可以沒有,在呼叫的時候也是,引數可以有可以沒有,也可以和定義時的引數個數不一致 沒有給count傳入引數,預設為10 也可以直接在引數中給count賦值 但是特別注意的是不能給count傳入0,因為0與undefined都是false,因此count傳入的...

函式引數預設值

include 函式預設值為0 intmul int x 0 c語言編譯器會報錯,c 不會 intmain int argc,char ar 預設值不需要在定義時給出,宣告時給出即可 intmul int x 函式預設引數的規則 引數的預設值必須從右向左匹配 函式呼叫時使用了預設值,則後續引數必須使...

C 函式引數的預設值

我們可以賦予函式引數預設值。所謂預設值就是在呼叫時,可以不寫某些引數的值,編譯器會自動把預設值傳遞給呼叫語句中。關於預設值要注意幾點 1.我們通常是將預設值的設定放在宣告中而不是定義中。2.不能將實際值傳遞給引用型別的引數。可以將變數作引用型別引數的預設值,這時變數必須是已經宣告且是全域性變數。宣告...