先拋出兩個(gè)問題:
指針和引用有什么區(qū)別?
什么時(shí)候使用指針?什么時(shí)候使用引用?
一、指針和引用的區(qū)別
首先,看一段代碼:
int a = 1;int b = 2;int *c = nullptr;c = &a;int &d = b;
指針其實(shí)就是一個(gè)存放內(nèi)存地址的整數(shù),這個(gè)整數(shù)表示的是被指向的變量的地址。
引用其實(shí)就是變量的別名,就是給變量重新起了一個(gè)名字,注意引用既然是個(gè)別名,那它一定要有本體,一個(gè)人叫王二小,我們也可以給它起個(gè)別名叫二蛋,我們提到二蛋和王二小其實(shí)都是同一個(gè)人。
區(qū)別:
指針在聲明時(shí)可以暫時(shí)不初始化,即pointer = nullptr,指針在生命周期內(nèi)隨時(shí)都可能是空指針,所以在每次使用時(shí)都要做檢查,防止出現(xiàn)空指針異常問題,而引用卻不需要做檢查,因?yàn)橐糜肋h(yuǎn)都不會(huì)為空,它一定有本體,一定得代表某個(gè)對象,引用在創(chuàng)建的同時(shí)必須被初始化。
void FuncPtr(int *ptr) { if (ptr != nullptr) { cout << *ptr; }} void FuncReference(int &ref) { cout << ref;}
指針存放的是地址,指針可以被重新賦值,可以在初始化時(shí)指向一個(gè)對象,在其它時(shí)刻也可以指向另一個(gè)對象,而引用非常專一,它會(huì)從一而終,它總是指向它最初代表的那個(gè)對象。再舉個(gè)例子,有一個(gè)人叫特朗普,為他起個(gè)引用別名叫歷史上最傻吊的總統(tǒng),這個(gè)引用一定會(huì)從一而終,即無論什么時(shí)候,歷史上最傻吊的總統(tǒng)一定是特朗普。而美國總統(tǒng)可以當(dāng)作個(gè)指針,一段時(shí)間可以是奧巴馬,過一段時(shí)間可以是特朗普,再過一段時(shí)間可能是nullptr。
二、指針和引用的使用場景
引用的主要功能就是作為函數(shù)的參數(shù)和返回值,看一段代碼:
struct A { int a;};void func(const A &a) { cout << a.a;} vector
其實(shí)我們平時(shí)編程過程中可能也注意到,實(shí)際上引用可以做的事情指針都可以做,但為什么還要引用這個(gè)東西?
答案:
用恰當(dāng)?shù)墓ぞ咦銮∪缙浞值墓ぷ鳎羔樋梢院翢o約束的操作內(nèi)存中的任何東西,功能十分強(qiáng)大,但是也很危險(xiǎn),所以可以在恰當(dāng)?shù)臅r(shí)機(jī)使用引用,當(dāng)你需要指向某個(gè)東西,而且一定專一,絕不會(huì)讓其指向其它東西,例如有些函數(shù)參數(shù)為了避免拷貝可以使用引用,或者實(shí)現(xiàn)一個(gè)操作符而其語法需求無法由指針達(dá)成,例如vec[3]=3,可以使用引用,其它任何時(shí)候,都要使用指針。
引用在c++11后其實(shí)有很多知識(shí)點(diǎn),具體可以參考下列文章:
左值引用、右值引用、移動(dòng)語義、完美轉(zhuǎn)發(fā),你知道的不知道的都在這里
參考資料
《More Effective C++》
https://www.runoob.com/w3cnote/cpp-difference-between-pointers-and-references.html
https://blog.csdn.net/weikangc/article/details/49762929
https://www.jianshu.com/p/e548a978d737
https://zhuanlan.zhihu.com/p/63096392
-
指針
+關(guān)注
關(guān)注
1文章
484瀏覽量
70994 -
引用
+關(guān)注
關(guān)注
0文章
8瀏覽量
7834
原文標(biāo)題:指針和引用有什么區(qū)別?
文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
函數(shù)指針的六個(gè)常見應(yīng)用場景

取樣示波器的技術(shù)原理和應(yīng)用場景
數(shù)據(jù)記錄儀的計(jì)數(shù)原理和應(yīng)用場景
敏捷合成器的技術(shù)原理和應(yīng)用場景
脈沖信號分析儀?的原理和應(yīng)用場景
混合信號分析儀的原理和應(yīng)用場景
低電平靈敏專用儀器的技術(shù)原理和應(yīng)用場景
倍頻器的技術(shù)原理和應(yīng)用場景
系統(tǒng)放大器的技術(shù)原理和應(yīng)用場景
實(shí)時(shí)示波器的技術(shù)原理和應(yīng)用場景
源測量單元設(shè)備的技術(shù)原理和應(yīng)用場景
超聲波測厚儀的技術(shù)原理和應(yīng)用場景
面試常考+1:函數(shù)指針與指針函數(shù)、數(shù)組指針與指針數(shù)組

評論