首頁>技術>

在前兩篇文章引用(上)(中)裡分別講了引用的作用、初始化注意事項以及引用做引數、返回值的相關內容,現在我們繼續將“引用”剩下的基礎知識學完。

內容五:引用的本質 一個指標常量

引用的本質是一個指標常量,這也就解釋了前面一篇講的引用傳遞實際上也是地址傳遞,效果相同。

分析:int &ref=a; 實際上編譯器會自動轉換為 int * const ref = &a;

指標變數:固定指向,可改變指向內容。 換句話說,不能改變指向的記憶體空間 但可以修改記憶體空間內容。這也是為什麼“引用一旦初始化後,不能改變”的原因。改變引用就相當於改變指向。

ref=20 編譯器自動轉換為 解引用 *ref=20;指標常量允許修改內容。

可以透過下圖幫助理解指標常量不能改變指向,但可以改變內容。

瞭解引用的本質能夠更好地理解指標的偉大。引用說白了就是一種特殊的指標,在編譯器上不以常規的指標格式顯示而已。

內容六:常量引用

作用:主要是用來修飾形參,防止誤操作

在函式形參列表中用const關鍵字修飾形參,防止形參改變實參

結合上面兩張圖我們可以看出,列印函式的功能僅僅是想列印變數a,但實際操作上或許有很多行程式碼,這樣突然不小心寫到修改形參的程式碼時很難察覺,因為引用傳遞,甚至修改了實參,這很顯然是我們不希望的。因此使用常量引用形參無法改變實參,防止誤操作。

補充:

1.常量無法被引用

上圖中很明顯編譯器會報錯,因為引用的本質是指標常量,指標接收的是一個地址。很明顯常量無法被引用。

2.加入const關鍵字進行引用初始化時,相當於編譯器臨時開闢一個記憶體空間。此時可以接收常量作為臨時空間的內容,但無法修改,起只讀效果。

上圖中的 const int &ret=10; 相當於 int temp=10; int &ret=temp;

11
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 微服務架構生態體系