傳值、傳址、傳引用的區(qū)別,哪個(gè)更高效?
1.傳值
這種傳遞方式中,實(shí)參和形參是兩個(gè)不同的地址空間,參數(shù)傳遞的實(shí)質(zhì)是將原函數(shù)中變量的值,復(fù)制到被調(diào)用函數(shù)形參所在的存儲(chǔ)空間中,這個(gè)形參的地址空間在函數(shù)執(zhí)行完畢后,會(huì)被回收掉。整個(gè)被調(diào)用函數(shù)對(duì)形參的操作,只影響形參對(duì)應(yīng)的地址空間,不影響原來函數(shù)中的變量的值,因?yàn)檫@兩個(gè)不是同一個(gè)存儲(chǔ)空間。
即使形參的值在函數(shù)中發(fā)生了變化,實(shí)參的值也完全不會(huì)受到影響,仍為調(diào)用前的值。
2.傳址
這種參數(shù)傳遞方式中,實(shí)參是變量的地址,形參是指針類型的變量,在函數(shù)中對(duì)指針變量的操作,就是對(duì)實(shí)參(變量地址)所對(duì)應(yīng)的變量的操作,函數(shù)調(diào)用結(jié)束后,原函數(shù)中的變量的值將會(huì)發(fā)生改變。
被調(diào)用函數(shù)中對(duì)形參指針?biāo)赶虻牡刂分袃?nèi)容的任何改變都會(huì)影響到實(shí)參。
3.傳引用
這種參數(shù)傳遞方式中,形參是引用類型變量,其實(shí)就是實(shí)參的一個(gè)別名,在被調(diào)用函數(shù)中,對(duì)引用變量的所有操作等價(jià)于對(duì)實(shí)參的操作,這樣,整個(gè)函數(shù)執(zhí)行完畢后,原先的實(shí)參的值將會(huì)發(fā)生改變。
被調(diào)函數(shù)對(duì)形參做的任何操作都影響了主調(diào)函數(shù)中的實(shí)參變量。
4.哪一種更高效?
在內(nèi)置類型當(dāng)中三種傳遞方式的效率上都差不多;
在自定義類型當(dāng)中,傳引用的更高效一些,因?yàn)樗鼪]有對(duì)形參進(jìn)行一次拷貝
-
參數(shù)
+關(guān)注
關(guān)注
11文章
1869瀏覽量
33945 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4417瀏覽量
67504 -
C++
+關(guān)注
關(guān)注
22文章
2124瀏覽量
77112
發(fā)布評(píng)論請(qǐng)先 登錄
VI 間傳值,,當(dāng)生成EXE時(shí) 不行,,
SIM800C的透傳模式的問題
uboot是怎么傳參給內(nèi)核的?
什么是藍(lán)牙透傳
JavaScript讓HTML靜態(tài)頁(yè)面傳值的方法
C語(yǔ)言函數(shù)中的傳值和傳指針到底有什么區(qū)別
頁(yè)面之間如何進(jìn)行傳值詳細(xì)方法
C語(yǔ)言函數(shù)參數(shù)關(guān)于傳值和傳指針有什么區(qū)別?
遠(yuǎn)傳變送器的原理及特點(diǎn)
為什么需要無線回傳 Wi-Fi回傳有哪些應(yīng)用
輕松搞懂透傳和非透傳的區(qū)別
傳值、傳址、傳引用的區(qū)別,哪個(gè)更高效?
評(píng)論