找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 2761|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

[C++]筆記二十四:C++中函數(shù)參數(shù)傳遞的方式

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:244281 發(fā)表于 2018-4-3 20:45 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
本帖最后由 tyyhmtyyhm 于 2018-4-28 10:03 編輯

C++中,參數(shù)傳遞的方式是實(shí)虛結(jié)合 函數(shù)被調(diào)用時(shí)的傳參方式有三種形式(C語言中沒有“引用”,另外兩個(gè)相同):
1按值傳遞(pass by value)
2地址傳遞(pass by pointer)
3引用傳遞(pass by reference)

1、按值傳遞
過程為:首先計(jì)算出實(shí)參表達(dá)式的值,接著給對應(yīng)的形參變量分配一個(gè)存儲(chǔ)空間,該空間的大小等于該形參類型的,然后把求出的實(shí)參表達(dá)式的值一一存入到形參變量分配的存儲(chǔ)空間中,成為形參變量的初值,供被調(diào)用函數(shù)執(zhí)行時(shí)使用。這種傳遞是把實(shí)參表達(dá)式的值傳送給對應(yīng)的形參變量,故稱這種傳遞方式為“按值傳遞”。
使用這種方式,調(diào)用函數(shù)本不對實(shí)參進(jìn)行操作,也就是說,即使形參的值在函數(shù)中發(fā)生了變化,實(shí)參的值也完全不會(huì)受到影響,仍為調(diào)用前的值。

2、按地址傳遞
如果在函數(shù)定義時(shí)將形參聲明成指針,對這樣的函數(shù)進(jìn)行調(diào)用時(shí)就需要指定地址值形式的實(shí)參。這時(shí)的參數(shù)傳遞方式就是地址傳遞方式。
地址傳遞與按值傳遞的不同在于,它把實(shí)參的存儲(chǔ)地址傳送給對應(yīng)的形參,從而使得形參指針和實(shí)參指針指向同一個(gè)地址。因此,被調(diào)用函數(shù)中對形參指針?biāo)赶虻牡刂分袃?nèi)容的任何改變都會(huì)影響到實(shí)參。
按地址傳遞的好處:
1)能在函數(shù)內(nèi)部通過實(shí)參地址間接地改變實(shí)參的值。
2)當(dāng)所傳實(shí)參內(nèi)容比較龐大時(shí),傳址只是復(fù)制了整個(gè)實(shí)參的地址過去,指針依據(jù)同一個(gè)地址訪問實(shí)參變量。而傳值就會(huì)將實(shí)參內(nèi)容整個(gè)拷貝過去,形參會(huì)跟實(shí)參占一樣大的內(nèi)存,�?臻g是有限的。當(dāng)然了,在弱小的程序中,傳址的這個(gè)優(yōu)點(diǎn)不會(huì)被體現(xiàn)出來。
指針傳遞的實(shí)質(zhì):
指針傳遞參數(shù)本質(zhì)上是值傳遞的方式,它所傳遞的是一個(gè)地址值。值傳遞過程中,被調(diào)函數(shù)的形式參數(shù)作為被調(diào)函數(shù)的局部變量處理,即在棧中開辟了內(nèi)存空間以存放由主調(diào)函數(shù)放進(jìn)來的實(shí)參的值,從而成為了實(shí)參的一個(gè)副本。值傳遞的特點(diǎn)是被調(diào)函數(shù)對形式參數(shù)的任何操作都是作為局部變量進(jìn)行,不會(huì)影響主調(diào)函數(shù)的實(shí)參變量的值。這里是在說實(shí)參指針本身的地址值不會(huì)變。

3、按引用傳遞
按值傳遞方式容易理解,但形參值的改變不能對實(shí)參產(chǎn)生影響。
地址傳遞方式雖然可以使得形參的改變對相應(yīng)的實(shí)參有效,但如果在函數(shù)中反復(fù)利用指針進(jìn)行間接訪問,會(huì)使程序容易產(chǎn)生錯(cuò)誤且難以閱讀。
如果以引用為參數(shù),則既可以使得對形參的任何操作都能改變相應(yīng)的數(shù)據(jù),又使得函數(shù)調(diào)用顯得方便、自然。引用傳遞方式是在函數(shù)定義時(shí)在形參前面加上引用運(yùn)算符“&”
形參相當(dāng)于是實(shí)參的別名,對形參的操作其實(shí)就是對實(shí)參的操作,在引用傳遞過程中,被調(diào)函數(shù)的形式參數(shù)雖然也作為局部變量在棧中開辟了內(nèi)存空間,但是這時(shí)存放的是由主調(diào)函數(shù)放進(jìn)來的實(shí)參變量的地址。被調(diào)函數(shù)對形參的任何操作都被處理成間接尋址,即通過棧中存放的地址訪問主調(diào)函數(shù)中的實(shí)參變量。正因?yàn)槿绱�,被調(diào)函數(shù)對形參做的任何操作都影響了主調(diào)函數(shù)中的實(shí)參變量。

【C++】筆記系列均為原創(chuàng),轉(zhuǎn)載請注明轉(zhuǎn)自微號:依法編程
更多精彩資料,請關(guān)注!


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表