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

C++引用的詳細(xì)解釋

 更新時(shí)間:2021年11月01日 10:09:31   作者:ALL IN C  
以下是對(duì)C++中引用的使用進(jìn)行了詳細(xì)的總結(jié)介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助,希望能夠給你帶來(lái)幫助

一、C++ 引用

變量名,本身是一段內(nèi)存的引用,即別名(alias)。此處引入的引用,是為己有變量起一個(gè)別名。

聲明如下

int main()
{
	int a;
	int &b = a;
}

1.規(guī)則

1.引用沒(méi)有定義,是一種關(guān)系型聲明。聲明它和原有某一變量的關(guān)系。類型與原有類型保持一致,且不分配內(nèi)存。與被引用的變量有相同的地址。

2.聲明的時(shí)候必須初始化,一經(jīng)聲明,不可變更。

3.可對(duì)引用,再次引用。多次引用的結(jié)果,是某一個(gè)變量具有多個(gè)別名。

4.&符號(hào)前面有數(shù)據(jù)類型時(shí),是引用。其他均為取地址。

#include <iostream>
using namespace std;
int main()
{
	int a,b;
	int &r = a;
	int &r = b; //錯(cuò)誤,不可更改原有的引用關(guān)系
	float &rr = b; //錯(cuò)誤,引用類型不匹配
	cout<<&a<<&r<<endl; //變量與引用具有相同的地址。
	int &ra = r; //可對(duì)引用更次引用,表示 a 變量有兩個(gè)別名,分別是 r 和 ra
}

輸出結(jié)果

2.應(yīng)用

1.值作函數(shù)參數(shù)

void swap(int a, int b); //無(wú)法實(shí)現(xiàn)兩數(shù)據(jù)的交換
void swap(int *p, int *q); //開(kāi)辟了兩個(gè)指針空間實(shí)現(xiàn)交換

2.引用作函數(shù)參數(shù)

#include <iostream>
using namespace std;
void swap(int &a, int &b){
	int tmp;
	tmp = a;
	a = b;
	b = tmp;
}
int main(){
	int a = 3,b = 5;
	cout<<"a = "<<a<<"b = "<<b<<endl;
	swap(a,b);
	cout<<"a = "<<a<<"b = "<<b<<endl;
	return 0;
}

輸出結(jié)果

c++中引入引用后,可以用引用解決的問(wèn)題。避免用指針來(lái)解決。

3.引用提高

引用的本質(zhì)是指針,C++對(duì)裸露的內(nèi)存地址(指針)作了一次包裝。又取得指針的優(yōu)良特性。所以再對(duì)引用取地址,建立引用的指針沒(méi)有意義

1.可以定義指針的引用,但不能定義引用的引用。

int a;
int* p = &a;
int*& rp = p; // ok
int& r = a;
int&& rr = r;//error

例子:

#include <iostream>
using namespace std;
void swap(char *pa,char *pb)
{
	char *t;
	t=pa;
	pa=pb;
	pb=t;
}
void swap2(char **pa,char **pb)
{
	char *t;
	t=*pa;
	*pa=*pb;
	*pb=t;
}
void swap3(char *&pa,char *&pb)//指針的引用
{
	char *t;
	t=pa;
	pa=pb;
	pb=t;
}
int main()
{
	char *pa="china";
	char *pb="america";
	cout<<"pa"<<pa<<endl;
	cout<<"pb"<<pb<<endl;
	//swap(pa,pb);
	//swap2(&pa,&pb);
	swap3(pa,pb);
	cout<<"pa"<<pa<<endl;
	cout<<"pb"<<pb<<endl;
	return 0;
}

輸出結(jié)果

2.可以定義指針的指針,不能定義引用的指針。

int a;
int* p = &a;
int** pp = &p; // ok
int& r = a;
int&* pr = &r; // error

3.可以定義指針數(shù)組,但不能定義引用數(shù)組,可以定義數(shù)組引用。

int a, b, c;
int* parr[] = {&a, &b, &c}; // ok
int& rarr[] = {a, b, c}; // error
int arr[] = {1, 2, 3};
int (&rarr)[3] = arr; // ok

4.常引用

const 引用有較多使用。它可以防止對(duì)象的值被隨意修改。因而具有一些特性。

(1)const 對(duì)象的引用必須是 const 的,將普通引用綁定到 const 對(duì)象是不合法的。

這個(gè)原因比較簡(jiǎn)單。既然對(duì)象是 const 的,表示不能被修改,引用當(dāng)然也不能修改,必須使用 const 引用。實(shí)際上,const int a=1; int &b=a;這種寫(xiě)法是不合法的,編譯不過(guò)。

(2)const 引用可使用相關(guān)類型的對(duì)象(常量,非同類型的變量或表達(dá)式)初始化。

這個(gè)是const 引用與普通引用最大的區(qū)別。const int &a=2;是合法的。double x=3.14; const int&b=x;也是合法的。

4.常引用原理

const 引用的目的是,禁止通過(guò)修改引用值來(lái)改變被引用的對(duì)象。const 引用的初始化特性較為微妙,可通過(guò)如下代碼說(shuō)明

double val = 3.14;
const int &ref = val; // int const & int & const ??
double & ref2 = val;
cout<<ref<<" "<<ref2<<endl;
val = 4.14;
cout<<ref<<" "<<ref2<<endl;

上述輸出結(jié)果為 3 3.14 和 3 4.14。因?yàn)?ref 是 const 的,在初始化的過(guò)程中已經(jīng)給定值,不允許修改。而被引用的對(duì)象是 val,是非 const 的,所以 val 的修改并未影響 ref 的值,而 ref2 的值發(fā)生了相應(yīng)的改變。

那么,為什么非 const 的引用不能使用相關(guān)類型初始化呢?實(shí)際上,const 引用使用相關(guān)類型對(duì)象初始化時(shí)發(fā)生了如下過(guò)程:

int temp = val;
const int &ref = temp;

如果 ref 不是 const 的,那么改變 ref 值,修改的是 temp,而不是 val。期望對(duì) ref 的賦值會(huì)修改 val 的程序員會(huì)發(fā)現(xiàn) val 實(shí)際并未修改。

int i=5;
const int & ref = i+5;
//此時(shí)產(chǎn)生了與表達(dá)式等值的無(wú)名的臨時(shí)變量,
//此時(shí)的引用是對(duì)無(wú)名的臨時(shí)變量的引用。故不能更改。
cout<<ref<<endl;

5.const的好處

1,使用 const 可以避免無(wú)意修改數(shù)據(jù)的編程錯(cuò)誤。

2,使用 const 可以處理 const 和非 const 實(shí)參。否則將只能接受非 const 數(shù)據(jù)。

3,使用 const 引用,可使函數(shù)能夠正確的生成并使用臨時(shí)變量(如果實(shí)參與引用參數(shù)不匹配,就會(huì)生成臨時(shí)變量)

6.引用的本質(zhì)淺析

1.大小與不可再引用

struct TypeP
{
	char *p;
};
struct TypeC
{
	char c;
};
struct TypeR
{
	char& r; //把引用單列出來(lái),不與具體的對(duì)象發(fā)生關(guān)系
};
int main()
{
	printf("%d %d %d\n",sizeof(TypeP),sizeof(TypeC),sizeof(TypeR));
	return 0;
}

輸出結(jié)果

結(jié)論:引用的本質(zhì)是,是對(duì)常指針 type * const p 的再次包裝。

1、const int *pi                                   指向常量的指針。
2、int * const pi                                  指針本身是一個(gè)常量,稱為“指針常量”、“常指針”。
3、const int * const pi                       指向常量的指針常量。

總結(jié)

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • C++實(shí)現(xiàn)LeetCode(66.加一運(yùn)算)

    C++實(shí)現(xiàn)LeetCode(66.加一運(yùn)算)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(66.加一運(yùn)算),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C語(yǔ)言實(shí)現(xiàn)棧的示例詳解

    C語(yǔ)言實(shí)現(xiàn)棧的示例詳解

    棧是一種特殊的線性表,只允許從一端進(jìn)出數(shù)據(jù),稱為后進(jìn)先出,先進(jìn)后出。本文主要為大家介紹了C語(yǔ)言實(shí)現(xiàn)棧的示例代碼,感興趣的可以了解一下
    2022-06-06
  • 用C語(yǔ)言實(shí)現(xiàn)三子棋

    用C語(yǔ)言實(shí)現(xiàn)三子棋

    這篇文章主要為大家詳細(xì)介紹了用C語(yǔ)言實(shí)現(xiàn)三子棋,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • c語(yǔ)言尾隊(duì)列tailq使用示例分享

    c語(yǔ)言尾隊(duì)列tailq使用示例分享

    這篇文章主要介紹了c語(yǔ)言尾隊(duì)列tailq使用示例,大家參考使用吧
    2014-01-01
  • 使用C++實(shí)現(xiàn)順序鏈表

    使用C++實(shí)現(xiàn)順序鏈表

    今天小編就為大家分享一篇關(guān)于使用C++實(shí)現(xiàn)順序鏈表,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • C++設(shè)計(jì)模式之命令模式

    C++設(shè)計(jì)模式之命令模式

    這篇文章主要介紹了C++設(shè)計(jì)模式之命令模式,本文講解了什么是命令模式、命令模式的使用場(chǎng)合等內(nèi)容,并給出了一個(gè)代碼實(shí)例,需要的朋友可以參考下
    2014-10-10
  • OpenCV實(shí)現(xiàn)無(wú)縫克隆算法的步驟詳解

    OpenCV實(shí)現(xiàn)無(wú)縫克隆算法的步驟詳解

    借助無(wú)縫克隆算法,您可以從一張圖像中復(fù)制一個(gè)對(duì)象,然后將其粘貼到另一張圖像中,從而形成一個(gè)看起來(lái)無(wú)縫且自然的構(gòu)圖。本文將詳解OpenCV實(shí)現(xiàn)無(wú)縫克隆算法的步驟,需要的可以參考一下
    2022-06-06
  • C++自動(dòng)生成迷宮游戲

    C++自動(dòng)生成迷宮游戲

    這篇文章主要為大家詳細(xì)介紹了C++自動(dòng)生成迷宮游戲,運(yùn)用并查集自動(dòng)生成迷宮地圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • C語(yǔ)言超詳細(xì)講解隊(duì)列的實(shí)現(xiàn)及代碼

    C語(yǔ)言超詳細(xì)講解隊(duì)列的實(shí)現(xiàn)及代碼

    隊(duì)列(Queue)與棧一樣,是一種線性存儲(chǔ)結(jié)構(gòu),它具有如下特點(diǎn):隊(duì)列中的數(shù)據(jù)元素遵循“先進(jìn)先出”(First?In?First?Out)的原則,簡(jiǎn)稱FIFO結(jié)構(gòu)。在隊(duì)尾添加元素,在隊(duì)頭刪除元素
    2022-04-04
  • Python與C++ 遍歷文件夾下的所有圖片實(shí)現(xiàn)代碼

    Python與C++ 遍歷文件夾下的所有圖片實(shí)現(xiàn)代碼

    這篇文章主要介紹了 Python與C++ 遍歷文件夾下的所有圖片實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下
    2017-06-06

最新評(píng)論

云南省| 兴海县| 靖江市| 博客| 翼城县| 邻水| 岑溪市| 永泰县| 富裕县| 剑川县| 肃南| 乡城县| 崇阳县| 锦州市| 墨江| 当阳市| 景泰县| 临潭县| 惠东县| 疏勒县| 渑池县| 岑巩县| 咸丰县| 同仁县| 额尔古纳市| 县级市| 麻城市| 昌都县| 麻城市| 大方县| 湟源县| 西乡县| 墨江| 和顺县| 板桥市| 长治市| 井陉县| 体育| 尖扎县| 连城县| 黑河市|