引用的本質

2021-06-11 22:13:14 字數 1157 閱讀 7844

首先,鄙人也是正在學習中的學生,不敢說深入徹底的理解了引用的本質。只是略有深度而已,請大家參考,也是督促自己深入理解一下引用。

老話:不喜勿噴哈,如有錯誤,敬請批評指正。

進入正題:

引用:老師一定都講過,引用是變數的別名,如:

引用的本質,其實就是乙個指標,乙個const型別的指標:

我們總是會說的引用是乙個別名,不占用記憶體空間。此話應該說是半對。網上有句經典的話說:你可以擁有引用,但編譯器僅僅擁有位址。所以實際上當定義了乙個引用同時初始化之後,並沒有為變數的這個別名分配空間。所以你在除錯的時候會看到這樣的畫面,你會覺得,引用真的只是乙個別名,它和a是一樣的。真的沒有佔記憶體。

然而對於編譯器及編譯後而言,它不會再管別名還是變數名,它只認位址。對於經過編譯之後生成的**而言,沒有變數名這一說。且看反彙編:

第一句語句的意思是:把0ah(十六進製制表示,即十進位制的10)寫入以a為位址的記憶體區域。

/*eax中存放的可是乙個位址啊。把乙個位址放進一塊記憶體空間,這讓你想到了什麼?對,指標!*/

那麼就是說:

引用在底層,實際是將所要引用的變數的位址放進了另乙個記憶體區域中,也就是將變數的位址賦給了乙個指標變數。。。這就是引用的實質。

並沒有為

這個別名開闢空間,所以你在記憶體看到的是兩個相同的位址。你就以為引用真的只是別名,真的不開闢空間了。

引用被翻譯成了指標(也就是說它在本質上就是乙個指標),是乙個常量指標,這個指標恆定的指向了乙個變數的空間。所以,引用實則也占用記憶體空間,在32位機上,占用了4個位元組。說引用是變數的別名,只是在語言層面上的一種理解方式。

C 引用的本質

引用的意義 1 引用作為其他變數的別名而存在,因此在一些場合可以代替指標 2 引用相對於指標來說具有更好的可讀性和實用性 引用的本質 1 單獨定義普通引用時 必須初始化,說明很像乙個常量 includeusing namespace std 1 第一點 單獨定義普通引用時 必須初始化,說明很像乙個常...

C 引用本質

b 50 mov eax,dword ptr b mov dword ptr eax 32h int d a lea eax,a mov dword ptr d eax d 60 mov eax,dword ptr d mov dword ptr eax 3ch 以上的 均來自具體的編譯器,怎麼樣,...

C 引用本質

引用本質究竟是什麼?或者說引用在計算機底層是怎麼實現的?我們來看下面一段c 1 int x 5 2 int y x 3 y 8 在vs2013下反彙編得到下面彙編 對應 1 mov dword ptr x 5 將常量5送入變數x中 對應 2 lea eax,x 取x的位址並送入eax暫存器中 mov...