1、基本概念
百度百科是這樣解釋的:C++是C語言的繼承,它可進(jìn)行過程化程序設(shè)計,又可以進(jìn)行以抽象數(shù)據(jù)類型為特點的基于對象的程序設(shè)計,還可以進(jìn)行以繼承和多態(tài)為特點的面向?qū)ο蟮某绦蛟O(shè)計。
引用(reference)就是C++對C語言的重要擴(kuò)充。引用就是某一變量(目標(biāo))的一個別名,對引用的操作與對變量直接操作完全一樣,編譯器不會為引用變量開辟內(nèi)存空間,它和它引用的變量共用同一塊內(nèi)存空間。引用的聲明方法:類型標(biāo)識符 &引用名=目標(biāo)變量名。
別名,又可以說是外號,代稱,比如水滸傳里幾乎是別名最多的地方。林沖,在家稱為"林教頭",江湖上人稱"豹子頭"。教頭和豹子頭就是林沖的別名。
2、區(qū)分
&就是引用,但是&這個操作符和取地址&操作符是重疊的,所以它們需要不同的場景規(guī)范:
當(dāng) &b單獨(dú)存在時,這時就代表取地址,為取出變量的地址。
但是如果這樣:
int main()
{
int a = 10;
int& b = a; // 引用
int* p = &b; // 取地址
return 0;
}
當(dāng) & 位于類型和變量名之間時,為引用。
3、本質(zhì)
調(diào)試查看一下 a 和 b 的關(guān)系:
我們發(fā)現(xiàn)a和b的值不僅相等,連它的地址也是相同的。這就可以說明,b就是a ,但是在語法層面上,這里b并不是開辟的新空間,而是對原來的a取了一個新名稱,叫做b。
就好比林沖被叫做豹子頭一樣,林沖還是林沖,豹子頭也是它;而a就是a,但是b也是 a 。
而如果這時候?qū)?a 或 b 任意一個修改,那么 a 和 b 都會發(fā)生修改。
4、特性
引用有以下3點是必須注意的?。?!
- 引用必須在定義時初始化
引用是取別名,所以在定義的時候必須明確是誰的別名。
- 一個變量可以有多個引用
就和林沖一樣,他可以叫豹子頭也可以叫林教頭,這都是它。
所以一個變量也可以有多個別名。
而對于一個起過別名的變量,對它的別名取別名也是可以的。
而從根本上看,就可以這么理解:
本質(zhì)上還是一個變量。
但是別名不能和正式名字沖突,就比如取過別名,就不能定義和別名重名的變量,即使它們的類型并不相同。
所以說這里的報錯信息并不準(zhǔn)確,實際上是命名沖突。
- 引用一旦引用一個實體,就不能引用其他實體
int main()
{
int a = 10;
int& b = a;
int c = 20;
b = c;
return 0;
}
對于下一組代碼,有什么含義?
- 讓 b 變成 c 的別名?
- 還是把 c 賦值給 b ?
這里的代碼意思是第二個含義,就是賦值,我們調(diào)試看看:
調(diào)試我們也可以看到,我們只是把 c 的值賦值給了 b ,b 的地址還是沒變的 ,并且 a 的值也改變了。
這就說明引用一旦引用某一個實體,就不能引用其他的實體,引用是不會發(fā)生改變的。
因為它們是完全獨(dú)立的兩個變量,僅有的關(guān)聯(lián)也只是值相等,改變 b 并不能影響 c ,但是此時 b 是 a 的別名,所以改變 b 就會影響 a 。
圖:
但是對于指針,則是截然不同的:
int main()
{
int a = 10;
int c = 20;
int* p = &a;
p = &c;
return 0;
}
對于指針來說,指針就可以時刻修改:
p原本指向 a ,現(xiàn)在指向 c.
但是引用也有局限性,因為引用之后的變量是不可修改引用的,比如鏈表,節(jié)點是要不斷更替迭代的,所以還需要指針配合,C++才可以寫出一個鏈表。
-
C語言
+關(guān)注
關(guān)注
180文章
7630瀏覽量
140980 -
C++
+關(guān)注
關(guān)注
22文章
2118瀏覽量
74964 -
面向?qū)ο?/span>
+關(guān)注
關(guān)注
0文章
64瀏覽量
10108
發(fā)布評論請先 登錄
c引用和指針的區(qū)別

Visual C++教程之C++的語言資料概述免費(fèi)下載

C++程序設(shè)計教程之?dāng)?shù)據(jù)類型的詳細(xì)資料說明

C++程序設(shè)計教程之C++的初步知識的詳細(xì)資料說明

C++程序設(shè)計教程之?dāng)?shù)組的詳細(xì)資料說明

C++程序設(shè)計教程之指針的詳細(xì)資料說明

C++程序設(shè)計教程之C++工具的詳細(xì)資料說明

C++中的const和引用的討論
C++基礎(chǔ)語法中的引用、封裝和多態(tài)
c++引用詳細(xì)解說2

c++引用詳細(xì)解說3

c++引用詳細(xì)解說4

評論