默認參數

默認參數

默認參數指的是當函式調用中省略了實參時自動使用的一個值。例如,如果將void wow(int n)設定成n有默認值為1,則函式調用wow()相當於wow(1)。這極大地提高了使用函式的靈活性。

簡介

假設有一個名為left()的函式,它將字元串和n作為參數,並返回該字元串的前n個字元。更準確地說,該函式返回一個指針,該指針指向由原始字元串中被選中的部分組成的字元串。例如,函式調用left("theory",3)將創建新字元串"the",並返回一個指向該字元串的指針。現在假設第二個參數的默認值被設定為1,則函式調用left("theory",3)仍像前面講訴的那樣工作,3將覆蓋默認值。但函式調用left("theory")不會出錯,它認為第二個參數的值為1,並返回指向字元串的"t"的指針。如果程式經常需要抽取一個字元組成的字元串,而偶爾需要抽取較長的字元串,則這種默認值很有幫助。

默認參數的定義必須是從右向左,並且最右邊一個參數的右邊不能有未指定默認值的參數。

用法

C語言中沒有參數默認值的概念,可以利用宏來模擬參數默認值;

在C++中,可以為參數指定默認值。在函式調用時沒有指定與形參相對應的實參時, 就自動使用默認參數。

默認參數的語法與使用:

(1)在函式聲明或定義時,直接對參數賦值。這就是默認參數;

(2)在函式調用時,省略部分或全部參數。這時可以用默認參數來代替。

注意:

(1)默認參數只可在函式聲明中設定一次。只有在無函式聲明時,才可以在函式定義中設定。

(2)默認參數定義的順序為自右到左。即如果一個參數設定了預設值時,其右邊的參數都要有預設值。

如:int mal(int a, int b=3, int c=6, int d=8) 正確,按從右到左順序設定默認值。

int mal(int a=6, int b=3, int c=5, int d) 錯誤,未按照從右到左設定默認值。c設定預設值了,而其右邊的d沒有預設值。

(3)默認參數調用時,則遵循參數調用順序,自左到右逐個調用。這一點要與第(2)分清楚,不要混淆。

如:void mal(int a, int b=3, int c=5); //默認參數

mal(3, 8, 9 ); //調用時有指定參數,則不使用默認參數

mal(3, 5); //調用時只指定兩個參數,按從左到右順序調用,相當於mal(3,5,5);

mal(3); //調用時只指定1個參數,按從左到右順序調用,相當於mal(3,3,5);

mal( ); //錯誤,因為a沒有默認值

mal(3, , 9) //錯誤,應按從左到右順序逐個調用(調用實參,即,實參必須是連續的)

再如: void mal(int a=8, int b=3, int c=5); //默認參數

mal( ); //正確,調用所有默認參數,相當於mal(8,3,5);

(4)默認值可以是全局變數、全局常量,甚至是一個函式。但不可以是局部變數。因為默認參數的調用是在編譯時確定的,而局部變數位置與默認值在編譯時無法確定。

相關詞條

相關搜尋

熱門詞條

聯絡我們