久久久精品一区ed2k-女人被男人叉到高潮的视频-中文字幕乱码一区久久麻豆樱花-俄罗斯熟妇真实视频

C++中有哪些傳參方式

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

漢川ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(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í)參的副本,如果形參的值在函數(shù)內(nèi)部被改變,對實(shí)參是沒有影響的。

#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

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

指針傳遞

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

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

引用傳遞

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

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

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

  1. 指針從本質(zhì)上是一個變量,是一個整形變量,存放的是另一個變量的地址。指針在邏輯上是獨(dú)立的,它可以被改變,甚至能改變它的值(指向其他地址),并且可以取出對應(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ù)放進(jìn)來的實(shí)參變量的地址。被調(diào)函數(shù)對形參的任何操作都被處理成間接尋址,即通過棧中存放的地址訪問主調(diào)函數(shù)中的實(shí)參變量。正因為如此,被調(diào)函數(shù)對形參做的任何操作都影響了主調(diào)函數(shù)中的實(shí)參變量。

引用的規(guī)則:

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

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

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

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

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

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

下面看具體操作:

引用變量的定義方法和常規(guī)變量類似,但是其數(shù)據(jù)類型和名稱之間有一個 & 符號。例如,以下函數(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

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

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

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

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

文章題目:C++中有哪些傳參方式
文章轉(zhuǎn)載:http://sd-ha.com/article36/jichsg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、全網(wǎng)營銷推廣用戶體驗、企業(yè)網(wǎng)站制作響應(yīng)式網(wǎng)站、網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化