本篇文章為大家展示了C++中有哪些傳參方式,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。
漢川ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來(lái)市場(chǎng)廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!
我們都知道,在函數(shù)定義括號(hào)中的參數(shù)是形參,是給函數(shù)內(nèi)專用的局部變量,意味著函數(shù)接收到的是實(shí)參的副本,如果形參的值在函數(shù)內(nèi)部被改變,對(duì)實(shí)參是沒(méi)有影響的。
#include <iostream>using namespace std;void change(int formalNum) { formalNum = 0; cout << "formalNum address: " << &formalNum << endl; }int main() { int realNum = 10; cout << "Before Change: " << realNum << endl; cout << "realNum address: " << &realNum << endl; change(realNum); cout << "After Change: " << realNum ; return 0; }// 執(zhí)行結(jié)果Before Change: 10realNum address: 008FFDA0 formalNum address: 008FFCCC After Change: 10
可以看見(jiàn),實(shí)參和形參的地址完全不一樣,而且函數(shù)完全沒(méi)有辦法改變實(shí)參的值。值傳遞的作用更多是讓函數(shù)內(nèi)部了解外部參數(shù)的值。值傳遞是單向的,只能由實(shí)參傳向形參。
指針傳遞很好理解,形參為指向?qū)崊⒌刂返闹羔槪?dāng)對(duì)形參操作時(shí),等同于直接通過(guò)地址操作實(shí)參。
#include <iostream>using namespace std;void change(int *ptr) { *ptr = 0; }int main() { int realNum = 10; int* ptr = &realNum; cout << "Before Change: " << realNum << endl; change(ptr); cout << "After Change: " << realNum ; return 0; }// 執(zhí)行結(jié)果Before Change: 10After Change: 0
可以很明顯地看見(jiàn),我們?cè)诤瘮?shù)內(nèi)部成功地修改了實(shí)參的值。是C++很常見(jiàn)的一種傳參方式。
引用傳遞其實(shí)是最難理解的一種傳參方式。在詳細(xì)剖析它之前,我們先說(shuō)他的功能。
向函數(shù)傳遞參數(shù)的引用調(diào)用方法,把引用的地址復(fù)制給形式參數(shù)。在函數(shù)內(nèi),該引用用于訪問(wèn)調(diào)用中要用到的實(shí)際參數(shù)。這意味著,修改形式參數(shù)會(huì)影響實(shí)際參數(shù)。
那么肯定有人問(wèn)了,既然都是直接影響,指針和引用有啥區(qū)別呢???那區(qū)別可大了去了。
指針從本質(zhì)上是一個(gè)變量,是一個(gè)整形變量,存放的是另一個(gè)變量的地址。指針在邏輯上是獨(dú)立的,它可以被改變,甚至能改變它的值(指向其他地址),并且可以取出對(duì)應(yīng)內(nèi)存中的數(shù)據(jù)。
引用可以理解為外號(hào),是另一個(gè)變量的同義詞,它在邏輯上具有依附性,所以C++也規(guī)定引用的在創(chuàng)立的時(shí)候就必須被初始化(現(xiàn)有一個(gè)變量,然后創(chuàng)建對(duì)該變量的引用)。而且其引用的對(duì)象在其整個(gè)生命周期中不能被改變,即自始至終只能依附于同一個(gè)變量(初始化的時(shí)候代表的是誰(shuí)的別名,就一直是誰(shuí)的別名,不能變)。
在引用傳遞過(guò)程中,被調(diào)函數(shù)的形式參數(shù)雖然也作為局部變量在棧中開(kāi)辟了內(nèi)存空間,但是這時(shí)存放的是由主調(diào)函數(shù)放進(jìn)來(lái)的實(shí)參變量的地址。被調(diào)函數(shù)對(duì)形參的任何操作都被處理成間接尋址,即通過(guò)棧中存放的地址訪問(wèn)主調(diào)函數(shù)中的實(shí)參變量。正因?yàn)槿绱耍徽{(diào)函數(shù)對(duì)形參做的任何操作都影響了主調(diào)函數(shù)中的實(shí)參變量。
引用的規(guī)則:
引用被創(chuàng)建的同時(shí)必須被初始化(指針則可以在任何時(shí)候被初始化)。
不能有NULL引用,引用必須與合法的存儲(chǔ)單元關(guān)聯(lián)(指針可以有野指針,可以指向NULL)。
一旦引用被初始化,就不能改變引用的關(guān)系(指針則可以隨時(shí)改變所指的對(duì)象)。
看了這么多,指針傳遞和引用傳遞的用處是什么呢?
函數(shù)內(nèi)部修改參數(shù)并且希望改動(dòng)影響調(diào)用函數(shù)。對(duì)比指針/引用傳遞可以將改變由形參“傳給”實(shí)參(實(shí)際上就是直接在實(shí)參的內(nèi)存上修改);
當(dāng)一個(gè)函數(shù)實(shí)際需要返回多個(gè)值,而只能顯式返回一個(gè)值時(shí),可以將另外需要返回的變量以指針/引用傳遞。
下面看具體操作:
引用變量的定義方法和常規(guī)變量類似,但是其數(shù)據(jù)類型和名稱之間有一個(gè) & 符號(hào)。例如,以下函數(shù)定義使形參 refNum 成為引用變量:
#include <iostream>using namespace std;void change(int& refNum) { refNum = 0; cout << "reference address: " << &refNum << endl; }int main() { int realNum = 10; cout << "Before Change: " << realNum << endl; cout << "realNum address: " << &realNum << endl; change(realNum); cout << "After Change: " << realNum ; return 0; }// 執(zhí)行結(jié)果Before Change: 10realNum address: 00A4F9F4 reference address: 00A4F9F4 After Change: 0
可以看見(jiàn),引用傳遞成功地改變了參數(shù)的值,同時(shí)形參的地址和實(shí)參的地址其實(shí)是一模一樣的。
在學(xué)完數(shù)據(jù)結(jié)構(gòu)和算法后,我對(duì)其又有新的認(rèn)識(shí)。
void func(nodeList* &Node){// 這里對(duì)Node進(jìn)行了操作}
上述內(nèi)容就是C++中有哪些傳參方式,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
文章題目:C++中有哪些傳參方式
文章轉(zhuǎn)載:http://www.rwnh.cn/article36/jichsg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、全網(wǎng)營(yíng)銷推廣、用戶體驗(yàn)、企業(yè)網(wǎng)站制作、響應(yīng)式網(wǎng)站、網(wǎng)站收錄
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)