深入分析C 引用

2021-07-11 15:47:05 字數 922 閱讀 2704

背景

在 c/c++ 中,訪問乙個變數只能通過兩種方式被訪問,傳遞,或者查詢。這兩種方式是:

1. 通過值 訪問 / 傳遞變數

2. 通過位址 訪問 / 傳遞變數 – 這種方法就是指標

除此之外沒有第三種訪問和傳遞變數值的方法。引用變數也就是個指標變數,它也擁有記憶體空間。最關鍵的是引用是一種會被編譯器自動解引用的指標。很難相信麼?讓我們來看看吧。。。

下面是一段使用引用的簡單 c++ **

[cpp]view plain

copy

print?

#include 

int main()  

引用其實就是 c++ 中的常量指標。表示式   int &i = j; 將會被編譯器轉化成 int *const i = &j; 而引用之所以要初始化是因為 const 型別變數必須初始化,這個指標也必須有所指。下面我們再次聚焦到上面這段**,並使用編譯器的那套語法將引用替換掉。

[cpp]view plain

copy

print?

#include 

int main()    

讀者一定很奇怪為什麼我上面這段**會跳過列印位址這步。這裡需要一些解釋。因為引用變數時會被編譯器自動解引用的,那麼乙個諸如   cout << &j << endl; 的語句,編譯器就會將其轉化成語句   cout << &*j << endl;   現在 &* 會相互抵消,這句話變的毫無意義,而 cout 列印的 j 值就是 i 的位址,因為其定義語句為 int *const j = &i;

所以語句 cout << &i << &j << endl; 變成了 cout << &i << &*j << endl; 這兩種情況都是列印輸出 i 的位址。這就是當我們列印普通變數和引用變數的時候會輸出相同位址的原因。

深入分析C 引用

關於引用和指標的區別的文章很多很多,但是總是找不到他們的根本區別,偶然在codeproject上看到這篇文章,覺得講的挺好的,所以翻譯了下,希望對大家有幫助。引言 我選擇寫 c 中的引用是因為我感覺大多數人誤解了引用。而我之所以有這個感受是因為我主持過很多 c 的面試,並且我很少從面試者中得到關於 ...

深入分析C 引用

摘自 關於引用和指標的區別的文章很多很多,但是總是找不到他們的根本區別,偶然在codeproject上看到這篇文章,覺得講的挺好的,所以翻譯了下,希望對大家有幫助。引言我選擇寫 c 中的引用是因為我感覺大多數人誤解了引用。而我之所以有這個感受是因為我主持過很多 c 的面試,並且我很少從面試者中得到關...

深入分析C 引用

關於引用和指標的區別的文章很多很多,但是總是找不到他們的根本區別,偶然在codeproject上看到這篇文章,覺得講的挺好的,所以翻譯了下,希望對大家有幫助。引言我選擇寫 c 中的引用是因為我感覺大多數人誤解了引用。而我之所以有這個感受是因為我主持過很多 c 的面試,並且我很少從面試者中得到關於 c...