真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C++中有哪些傳參方式

本篇文章為大家展示了C++中有哪些傳參方式,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

漢川ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!

值傳遞

我們都知道,在函數(shù)定義括號中的參數(shù)是形參,是給函數(shù)內(nèi)專用的局部變量,意味著函數(shù)接收到的是實參的副本,如果形參的值在函數(shù)內(nèi)部被改變,對實參是沒有影響的。

#include 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

可以看見,實參和形參的地址完全不一樣,而且函數(shù)完全沒有辦法改變實參的值。值傳遞的作用更多是讓函數(shù)內(nèi)部了解外部參數(shù)的值。值傳遞是單向的,只能由實參傳向形參。

指針傳遞

指針傳遞很好理解,形參為指向?qū)崊⒌刂返闹羔槪?dāng)對形參操作時,等同于直接通過地址操作實參。

#include 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

可以很明顯地看見,我們在函數(shù)內(nèi)部成功地修改了實參的值。是C++很常見的一種傳參方式。

引用傳遞

引用傳遞其實是最難理解的一種傳參方式。在詳細剖析它之前,我們先說他的功能。

向函數(shù)傳遞參數(shù)的引用調(diào)用方法,把引用的地址復(fù)制給形式參數(shù)。在函數(shù)內(nèi),該引用用于訪問調(diào)用中要用到的實際參數(shù)。這意味著,修改形式參數(shù)會影響實際參數(shù)。

那么肯定有人問了,既然都是直接影響,指針和引用有啥區(qū)別呢???那區(qū)別可大了去了。

  1. 指針從本質(zhì)上是一個變量,是一個整形變量,存放的是另一個變量的地址。指針在邏輯上是獨立的,它可以被改變,甚至能改變它的值(指向其他地址),并且可以取出對應(yīng)內(nèi)存中的數(shù)據(jù)。

  2. 引用可以理解為外號,是另一個變量的同義詞,它在邏輯上具有依附性,所以C++也規(guī)定引用的在創(chuàng)立的時候就必須被初始化(現(xiàn)有一個變量,然后創(chuàng)建對該變量的引用)。而且其引用的對象在其整個生命周期中不能被改變,即自始至終只能依附于同一個變量(初始化的時候代表的是誰的別名,就一直是誰的別名,不能變)。

  3. 在引用傳遞過程中,被調(diào)函數(shù)的形式參數(shù)雖然也作為局部變量在棧中開辟了內(nèi)存空間,但是這時存放的是由主調(diào)函數(shù)放進來的實參變量的地址。被調(diào)函數(shù)對形參的任何操作都被處理成間接尋址,即通過棧中存放的地址訪問主調(diào)函數(shù)中的實參變量。正因為如此,被調(diào)函數(shù)對形參做的任何操作都影響了主調(diào)函數(shù)中的實參變量。

引用的規(guī)則:

  • 引用被創(chuàng)建的同時必須被初始化(指針則可以在任何時候被初始化)。

  • 不能有NULL引用,引用必須與合法的存儲單元關(guān)聯(lián)(指針可以有野指針,可以指向NULL)。

  • 一旦引用被初始化,就不能改變引用的關(guān)系(指針則可以隨時改變所指的對象)。

看了這么多,指針傳遞引用傳遞的用處是什么呢?

  1. 函數(shù)內(nèi)部修改參數(shù)并且希望改動影響調(diào)用函數(shù)。對比指針/引用傳遞可以將改變由形參“傳給”實參(實際上就是直接在實參的內(nèi)存上修改);

  2. 當(dāng)一個函數(shù)實際需要返回多個值,而只能顯式返回一個值時,可以將另外需要返回的變量以指針/引用傳遞。

下面看具體操作:

引用變量的定義方法和常規(guī)變量類似,但是其數(shù)據(jù)類型和名稱之間有一個 & 符號。例如,以下函數(shù)定義使形參 refNum 成為引用變量:

#include 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

可以看見,引用傳遞成功地改變了參數(shù)的值,同時形參的地址和實參的地址其實是一模一樣的

在學(xué)完數(shù)據(jù)結(jié)構(gòu)和算法后,我對其又有新的認(rèn)識。

void func(nodeList* &Node){// 這里對Node進行了操作}

上述內(nèi)容就是C++中有哪些傳參方式,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


標(biāo)題名稱:C++中有哪些傳參方式
分享URL:http://weahome.cn/article/jichsg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部