C 學習記錄5 引用的本質分析

2021-09-05 10:26:12 字數 2339 閱讀 8517

1)引用是另乙個變數的別名,也就是已經存在的一段儲存空間的別名;

2)引用作為變數別名而存在,因此在一些場合可以代替指標;

3)引用相對於指標來說具有更好的可讀性和實用性。

注意:函式中的引用形參不需要進行初始化,呼叫的時候初始化

swap函式的實現對比:

1)在c++中可以宣告const引用;

2)const type & name = var;

3)const引用讓變數擁有唯讀屬性。

引用是另乙個變數的別名,因此乙個引用絕不可能是常量值的別名。也就是說不能用乙個字面常量對引用進行初始化。但可以使用字面常量對const引用進行初始化。這時候編譯器會真正的產生乙個唯讀變數。c++編譯器會為常量值分配空間,並將引用名最為這段空間的別名。

結論:使用常量對const引用初始化後將生成乙個唯讀變數!

#include void example()

void demo()

int main(int argc, char *argv)

執行結果為: 

問題:引用占用記憶體空間麼?(為啥15行所佔大小是1???)

結構體大小為8,是乙個指標型別的大小。

引用在c++中的內部實現是乙個指標常量。

注意:1)c++編譯器在編譯過程中用指標常量作為引用的內部實現,因此引用占用的空間大小與指標相同;

2)用使用的角度,引用只是乙個別名,c++為了實用性隱藏了引用的儲存空間這一細節。

通過對彙編**的分析,引用的內部實現就是指標操作。所以引用占用記憶體空間。

c++中的引用旨在大多數情況下代替指標:(引用的意義)

1)功能性:可以滿足多數需要使用指標的場合;

2)安全性:可以避開由於指標操作不當而帶來的記憶體錯誤;

3)操作性:簡單易用,又不失功能強大。

有些時候,引用不能完全避免記憶體操作方面的錯誤。

(返回區域性變數的位址是錯誤的!)

不要返回區域性變數的引用。

下面是出現記憶體錯誤的例子,根據程式

5-4,

demo

函式執行結束後,其中區域性變數被銷毀。此時,

rd所代表的變數就是乙個代表不存在的變數引用,已經沒有意義了。從指標的角度看,

rd變成野指標。所以會出現段錯誤。

C 5 引用的本質分析

swap 函式的對比 指標版本 void swap int a,int b 引用版本 注意 函式中的引用行參不需要進行初始化!void swap int a,int b 函式對比分析 引用如果作為函式的形參時,不需要進行初始 初始化發生在呼叫的時候。指標版本要交換a和b的值,傳進去的是a和b的位址,...

lessons5 引用( )的本質

例如 int a c 等同於 int const a c 注意 1 引用占用空間大小與指標相同。2 引用是變數的乙個別名。3 引用的特性 功能性 本質是指標 安全性 可以避免由於指標操作不當帶來的記憶體錯誤 操作性 簡單 例如 const int a var.該引用使得變數有唯讀屬性 int a 4...

C 語言學習記錄 9 引用

引用是c 中的一種特有的語法,用以優化c中只能使用指標的缺點,同時也是有自己語言特性的乙個語法。如果不使用引用,在這裡的程式就無法正常實現它的功能。include using namespace std void swap int a,int b 定義乙個swap函式實現資料的交換 上面的例子看似可...