最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++淺析引用的定義與使用

 更新時間:2022年07月08日 09:16:38   作者:幻荼  
引用是C++一個很重要的特性,顧名思義是某一個變量或?qū)ο蟮膭e名,對引用的操作與對其所綁定的變量或?qū)ο蟮牟僮魍耆葍r,這篇文章主要給大家總結(jié)介紹了C++中引用的相關(guān)知識點(diǎn),需要的朋友可以參考下

解釋引用

首先我們先來看一個引用的例子

int main()
{
	int a = 10;
	int& Bin = a;
	cout << a << endl;
	cout << Bin << endl;
	cout << &a << endl;
	cout << &Bin << endl;
}

對于一個int型函數(shù)a,我們對a進(jìn)行了引用,引用的新int函數(shù)叫Bin。

由他們是同一個地址可以知道,引用其實(shí)就是對同一個地址的函數(shù),換了一個新的叫法。

相當(dāng)于《水滸傳》中,李逵在江湖上人稱黑旋風(fēng)

那么這里int a就相當(dāng)于李逵,而int&Bin就相當(dāng)于黑旋風(fēng)。

你使用李逵和黑旋風(fēng),他都會答應(yīng),這也就相當(dāng)于起外號

如下:

int main()
{
	int a = 10;
	int& Bin = a;
	Bin += 10;
	cout << a << endl;
	cout << Bin << endl;
	cout << &a << endl;
	cout << &Bin << endl;
}

可以看到我們這里是對Bin進(jìn)行操作,但是a的值也改變了。

同時我們也可以多個引用,可以給引用再引用(給外號再起外號)

int main()
{
	int a = 10;
	int& Bin = a;
	int& Tian = a;
	int& Wei = Bin;
	cout << a << endl;
	cout << Bin << endl;
	cout << Tian << endl;
	cout << Wei << endl;
	cout << &a << endl;
	cout << &Bin << endl;
	cout << &Tian << endl;
	cout << &Wei << endl;
}

可以看到值和地址還是相同。

注意:引用必須同等類型

int a=10;
double&b=a;
這是錯誤的

引用的作用

非常經(jīng)典的引用就是交換兩個數(shù)的值。

這是我們c語言的交換,這里形參不改變實(shí)參

void test1(int a,int b)//a,b不改變,因?yàn)閍,b的生命周期只在swap函數(shù)內(nèi),結(jié)束swap后a,b就消失,不改變實(shí)參
{
	int tmp = a;
	a = b;
	b = tmp;
}
int main()
{
	int a = 1;
	int b = 2;
	test1(a, b);
	cout << a << " " << b << endl;
}

然后我們學(xué)習(xí)了指針后,知道能直接交換地址

void test2(int* a, int *b)//使用指針,交換地址實(shí)現(xiàn)數(shù)字變換
{
	int tmp = *a;
	*a = *b;
	*b = tmp;
}
int main()
{
	int a = 1;
	int b = 2;
	test2(&a,&b);
	cout << a << " " << b << endl;
}

然后這是引用,引用是實(shí)參的外號,我們這里修改,是對實(shí)參的直接修改

void test3(int& a, int& b)//使用引用,a,b是實(shí)參的別名,相當(dāng)于對實(shí)參的調(diào)用
{
	int tmp = a;
	a = b;
	b = tmp;
}
int main()
{
	int a = 1;
	int b = 2;
	test3(a, b);
	cout << a << " " << b << endl;
}

注意:我們這里的引用都必須是合法的空間

Int &a = 10;//10并不是一個空間,只是一個數(shù),這是錯誤的引用

關(guān)于局部變量的引用

int& test2()
{
	int b = 10;
	return b;
}
void test1()
{
	int &a = test2();
	cout <<  a << endl;
}
int main()
{
	test1();
}

按照常理,這里test2中的b出了test2應(yīng)該作為局部變量被回收,但是

我們依然能得到正確答案,這是因?yàn)榫幾g器有對這種情況進(jìn)行優(yōu)化,但是僅限一次

如果我們這樣

int& test2()
{
	int b = 10;
	return b;
}
void test1()
{
	int& a = test2();
	cout << a << endl;
	cout << a << endl;
	cout << a << endl;
	cout << a << endl;
}
int main()
{
	test1();
}

多調(diào)用幾次打印

就會發(fā)現(xiàn)除了第一次是正常的,其余都是亂碼。

注:如果實(shí)在是要這樣搞,就加上靜態(tài)變量Static。

int& test2()
{
	static int b = 10;
	return b;
}
void test1()
{
	int& a = test2();
	cout << a << endl;
	cout << a << endl;
	cout << a << endl;
	cout << a << endl;
}
int main()
{
	test1();
}

到此這篇關(guān)于C++淺析引用的定義與使用的文章就介紹到這了,更多相關(guān)C++引用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Visual Studio Code 配置C、C++環(huán)境/編譯并運(yùn)行的流程分析

    Visual Studio Code 配置C、C++環(huán)境/編譯并運(yùn)行的流程分析

    這篇文章主要介紹了Visual Studio Code 配置C、C++環(huán)境/編譯并運(yùn)行的流程分析,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • C++超詳細(xì)介紹模板

    C++超詳細(xì)介紹模板

    人們需要編寫多個形式和功能都相似的函數(shù),因此有了函數(shù)模板來減少重復(fù)勞動;人們也需要編寫多個形式和功能都相似的類,于是 C++ 引人了類模板的概念,編譯器從類模板可以自動生成多個類,避免了程序員的重復(fù)勞動
    2022-07-07
  • Seesion在C++服務(wù)端的使用方法

    Seesion在C++服務(wù)端的使用方法

    這篇文章主要介紹了Seesion在C++服務(wù)端是怎么使用的?本文給出了解決方案和實(shí)例代碼供大家參考,需要的朋友可以參考下
    2020-02-02
  • 一起來學(xué)習(xí)C++的動態(tài)內(nèi)存管理

    一起來學(xué)習(xí)C++的動態(tài)內(nèi)存管理

    這篇文章主要為大家詳細(xì)介紹了C++的動態(tài)內(nèi)存管理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • atoi和itoa函數(shù)的實(shí)現(xiàn)方法

    atoi和itoa函數(shù)的實(shí)現(xiàn)方法

    本文介紹了,atoi和itoa函數(shù)的實(shí)現(xiàn)方法,需要的朋友可以參考一下
    2013-03-03
  • C語言實(shí)現(xiàn)分治法實(shí)例

    C語言實(shí)現(xiàn)分治法實(shí)例

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)分治法的實(shí)例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • c語言中十六進(jìn)制轉(zhuǎn)二進(jìn)制顯示的實(shí)現(xiàn)方法

    c語言中十六進(jìn)制轉(zhuǎn)二進(jìn)制顯示的實(shí)現(xiàn)方法

    本篇文章對c語言中十六進(jìn)制轉(zhuǎn)二進(jìn)制顯示的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 詳解c++20協(xié)程如何使用

    詳解c++20協(xié)程如何使用

    這篇文章主要介紹了詳解c++20協(xié)程如何使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • C++火車入軌算法的實(shí)現(xiàn)代碼

    C++火車入軌算法的實(shí)現(xiàn)代碼

    這篇文章主要介紹了C++火車入軌算法的實(shí)現(xiàn)代碼,有需要的朋友可以參考一下
    2013-12-12
  • 如何把C++的源代碼改寫成C代碼的方法

    如何把C++的源代碼改寫成C代碼的方法

    這篇文章主要介紹了如何把C++的源代碼改寫成C代碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07

最新評論

封开县| 昂仁县| 额济纳旗| 葵青区| 泗洪县| 怀集县| 龙州县| 桂林市| 永丰县| 奉节县| 开远市| 安塞县| 哈密市| 甘德县| 定边县| 阳山县| 海宁市| 玉环县| 乌拉特中旗| 深圳市| 古丈县| 湘乡市| 安乡县| 乐安县| 乳山市| 张家口市| 承德市| 印江| 屏山县| 遂平县| 友谊县| 子洲县| 长汀县| 梁平县| 九龙城区| 福鼎市| 聂荣县| 义马市| 平遥县| 隆安县| 麟游县|