1.非引用形參
非引用形參表示對對應實參的局部副本,對這類形參的修改僅僅改變了局部副本的值,一旦函數執行完成,這些局部變量的值也就沒有了。
1.1 指針形參
該類形參的任何改變也僅僅作用於局部副本,如果函數將新指針值賦給形參,主調函數使用的實參指針的值沒有改變。
1.2const形參
如果函數使用非引用的非const 形參,則即可給該函數傳遞const 實參,也可以傳遞非const 的實參。
如果函數使用非引用的const 形參,也是既可以給該函數傳遞const 實參,也可以傳遞非const 的實參,但是不可以改變實參的局部副本。
注意:儘管函數的形參是const,但編譯器卻將const 形參被聲明爲普通類型,如下
void fcn(const int i)就是void fcn(int i)
2.引用形參
作用有以下點:
2.1 使用引用形參可以返回額外的信息
函數只能返回單個值,通過傳遞引用形參可以改變實參的值,所以對應修改的值進行了改變。
2.2 利用const 引用避免複製
形參作爲引用,可以避免被複制,而且形參爲const 引用,則函數體不能通過該引用來修改實參。
應該將不需要修改的引用形參定義爲const 引用,因爲非const 引用形參只能與完全相同類型的非const 對象關聯,所以普通的非const 引用形參既不能用const對象初始化,也不能用字面值或者產生右值的表達式實參初始化。
3. 數組形參
因爲數組不能複製,所以無法編寫使用數組類型形參的函數,但是可以仍可將函數的形參寫成數組的形式,如下定義的三種形式是等價的。
void getValue(int*){}
void getValue(int[]){}
void getValue(int[10]){}
注意:當編譯器檢查數組形參關聯的實參時,它只會檢查實參是不是指針、指針的類型和數組元素的類型是否匹配,而不會檢查數組的長度。
在傳遞數組時,實參是指向數組第一個元素的指針,形參複製的是這個指針的值,而不是數組元素本身。
通過引用傳遞數組,編譯器檢查數組實參的大小與形參的大小是否匹配。
4. 含可變形參的函數
在無法列舉出傳遞給函數的所有實參的類型和數目時,可以使用省略符形參。省略符暫停了類型檢查機制。它們的出現告訴編譯器,當調用函數時,可以有0個或多個實參,而實參的類型未知。