c++形參實參

無名_四葉草發表於2020-04-04

c++形參實參實參和形參,很抽象的一個概念,新手很難搞懂。


形參:全稱為"形式引數"是在定義函式名和函式體的時候使用的引數,目的是用來接收呼叫該函式時傳遞的引數.
     形參的作用是實現主調函式與被調函式之間的聯絡.
    
實參:全稱為"實際引數"是在呼叫時傳遞該函式的引數.實參可以是常量、變數、表示式、函式等.

先說C語言:
    只要知道了按值傳遞和按地址傳遞的區別,就會明白實參和形參的具體工作細節。

1)按值傳遞(不能改變實參)
    實參是變數,表示式等數值。
    函式呼叫的時候,實參和形參存在於記憶體中2快不同的區域,實參先自己複製一份拷貝,再把拷貝傳給形參。由於是傳遞的是拷貝,所以實參不會受形參的影響,實參值不會被改變。

2)按地址傳遞(可以改變實參)
    實參是指標。
    函式呼叫的時候,指標傳給你,形參和實參指標都一樣,對形參的任何操作就等於對實參的操做。實參的值就可以被改變。

 

再說C++:
   C++有引用來代替指標這種落後的型別。

1)const引用傳遞(不能改變實參)
   和上面的C中按值傳遞的效果一樣,但是效率高一些,因為引用是不用拷貝實參的,減少了複製的開銷。const就決定了不能改變實參。

2)按引用傳遞(可以改變實參)
   引用其實大部分情況下和指標一樣,對形參的任何操作就等於對實參的操做。實參的值就可以被改變。要不變,就學上面加個const。

實際應用中,形參有3種用法:
1)f(int X)       這C語言的用法,實參是數值,就不變;實參是指標,就可以改變。

2)f(int& X)      C++的用法,實參可以改變。

3)f(const int& X)C++的用法,實參不變。

什麼時候用哪一種呢?就是取決於是否改變實參!!!
建議用C++的用法,雖然C++相容C。

注意:形參和實參的型別必須要一致,或者要符合隱含轉換規則,當形參和實參不是指標或引用型別時,在該函式執行時,形參和實參是不同的變數,他們在記憶體中位於不同的位置,形參將實參的內容複製一份,在該函式執行結束的時候形參被釋放,而實參內容不會改變。
而如果函式的引數是指標或引用型型別變數,在呼叫該函式的過程中,傳個函式的是實參的地址,在函式體內部使用的也是實參的地址,即使用的就是實參本身。所以在函式體內部可以改變實參的值。
 
對於一般型別的實參,在程式執行完後其值不變,而對於引用或者指標型別的實參,由於用的是它本身的地址,所以程式執行完後它們的值改變了。

注意比較(1)函式申明、(2)函式呼叫、(3)函式定義 的不同。
申明:
(1) int swap(int a,int b);   //子函式swap的引數為傳值使用,使用的原始資料不會被子函式swap修改
(2) int pswap(int &c,int &d);//子函式pswap的引數為傳地址使用(引用),引用的原始資料能被子函式pawap修改
//函式申明 格式: 是否返回值int/void 函式名pswap(引數的數值型別int 引用&/傳值 形式參量的名稱c,…)在這裡形參的名稱可有可無
呼叫:
swap(x,y);    //主函式裡子函式呼叫的格式: 子函式名(實參1,實參2,…),這裡函式名前面不加int、void,實參前面不寫數值型別
pswap(p,q);    //在這裡 x、y、p、q是實際引數

相關文章