C 預設引數

2021-09-22 13:59:42 字數 1770 閱讀 6071

預設引數的概念是,申明或定義函式時為函式的引數指定乙個預設的值;

從概念我們可以知道,預設引數針對的是函式中的引數;而且是申明定義函式,說明申明與定義不能同時存在預設引數;

其基本思路是:

1.當呼叫中沒有引數的時候,使用的就是定義函式的預設值

2.當呼叫中含有引數,使用的是指定的實參

2.1.當實參是與形參同型別的時候,一切ok

void func(int a = 0) 

int main()

其結果是正確列印出10。

2.2當實參與形參不是同型別的時候,那麼回是什麼情況呢?

void func(int a = 0) 

int main()

其結果為10,並報了warning c4244: 「引數」: 從「double」轉換到「int」,可能丟失資料的警告;這說明,我們存在實參,並傳實參的時候,並非完全不考慮形參的影響,而是受到形參型別的影響,實參會被形參的型別所約束

說完了思路,我們談談預設引數的種類:

預設引數有兩個種類:

1.全預設引數

2.半預設引數

1.全預設引數

void func(int a = 0,int b = 10,int c = 20) 

void func(int a = 10)

上述的情況我們都可以認為是全預設引數,為什麼呢,因為引數全部都給賦值了,即便只有乙個引數

全預設的情況實參的寫法就比較隨意了,但是還是要注意一點:

int main()
就如同上面的實參情況,我們只給了2個引數,但是形參中有3個引數;這怎麼理解呢?有些人會認為我只想給a,c賦值,然後我就用上面的形式,可以麼?錯誤;這時因為我們實參是具有順序的編譯器是認為你是乙個乙個給的即先給a的實參,再給b的實參,再給c的實參,當然這其中可以少給,但是只能少給次序在後面的不能跳著給;如果你實在想變a,c值,你可以這樣寫:

func(1,10,21)
這樣寫就是把3個引數都寫了,改變了a,c的值唯一沒變的就是b的值;它還是10

2.半預設引數

半預設的要求就多了,半預設引數要遵守一條很重要的規則

半預設引數必須從右往左依次來給出,不能間隔著給

這句話怎麼理解呢?說的就是我們定義形參的時候預設引數可以是由右邊開始往左邊走,這時候如果全部形參都預設了就變成全預設引數

void func(int a ,int b = 10,int c = 20) 

int main()

上述**表明,實參我只給a的也行,因為b,c已經由預設的引數了;但是上述引數的給不能跳著給,這是不允許的

為什麼形參必須是從右往左給呢,這時因為實參是從左往右給的啊,難道實參還能從右往左給?書寫方式都是從左往右,而且**觀察方式都是左->右,這些都是習慣;形參的能從右往左的原因是因為它是個表示式辨識能力強。

C 預設引數

一 預設引數 在c 中,可以為引數指定預設值。在函式呼叫時沒有指定與形參相對應的實參時,就自動使用預設引數。預設引數的語法與使用 1 在函式宣告或定義時,直接對引數賦值。這就是預設引數 2 在函式呼叫時,省略部分或全部引數。這時可以用預設引數來代替。注意 1 預設引數只可在函式宣告中設定一次。只有在...

C 預設引數

函式的預設引數值,即在定義引數的時候同時給它乙個初始值。在呼叫函式的時候,我們可以省略含有預設值的引數。也就是說,如果使用者指定了引數值,則使用使用者指定的值,否則使用預設引數的值。void func int i 1,float f 2.0f,double d 3.0 int main void 引...

C 預設引數

概念 在函式宣告或定義的時候給形參乙個預設的引數。這樣在呼叫該函式,如果沒有給實參,函式的這個形參就預設為這個值。使用規則 1 預設值必須從右往左給值 2 預設值必須為常量或全域性變數 const static 普通的 全域性變數 也可以作為預設引數 3 預設引數只能出現在宣告或者定義的一處 4 不...