c++形參實參
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是實際引數
相關文章
- C/C++中的實參和形參C++
- 方法的形參和實參
- 方法的實參和形參
- C語言 形參和實參C語言
- day10:函式的實參&形參函式
- php中函式的實參和形參PHP函式
- js 函式中形參與實參的關係JS函式
- 函式形參與實參的體會與對比函式
- java 方法呼叫,形參改變,實參是否發生改變Java
- [譯] 一個簡單方式教你記住Kotlin的形參和實參Kotlin
- 一道題帶你搞定Python函式中形參和實參問題Python函式
- python關於函式形參Python函式
- 學了這麼久的開發,你正真瞭解形參和實參的區別嗎
- Python的函式形參和返回值Python函式
- C語言結構體作為形參C語言結構體
- JavaSE 形參和返回值(引用型別)Java型別
- HTML 字元實體參考HTML字元
- 執行緒回撥函式形參不能用引用執行緒函式
- SpringBoot2 引數管理實踐,入參出參與校驗Spring Boot
- query傳參 和 params傳參方式
- python傳遞實參的方法Python
- react中路由傳參和url傳參React路由
- python函式的入參和傳參Python函式
- OSI參考模型和TCP/IP參考模型模型TCP
- C語言中變參函式傳參探究C語言函式
- 形函式,等參單元,雅克比矩陣,高斯積分函式矩陣
- 參加了多久
- javamail參考JavaAI
- 【SpringMVC】傳參SpringMVC
- [SpringMVC] 傳參SpringMVC
- 建模調參
- lightgbm調參
- [譯]Kotlin泛型中何時該用型別形參約束?Kotlin泛型型別
- Oracle 到 PostgreSQL參考分割槽實現OracleSQL
- Vue路由傳參Vue路由
- angular路由傳參Angular路由
- SCSS @mixin傳參CSS
- WebApiClient效能參考WebAPIclient