1. 程式人生 > 實用技巧 >淺談對引用變數的理解

淺談對引用變數的理解

淺談對引用變數的理解

本篇隨筆簡單記錄一下本蒟蒻對C++程式語言中引用變數的理解。

引用的概念

int a;
int b=a;

在上面的程式碼塊裡,\(a\)\(b\)的值相等。(額

但是\(a,b\)指向的並不是同一塊記憶體空間,也就是,雖然\(a,b\)的值是相等的,但是其實他倆並不是同一個變數,因為他們的記憶體空間不一樣。只是他們儲存的值是一個值而已。

int a;
int &b=a;

在上面的程式碼塊裡,\(a,b\)的值相等。(額額額

但是\(a,b\)指向的是同一塊記憶體空間了。這就是“引用”的概念,就是這個新變數\(b\)完全和\(a\)相同,只是相當於給\(a\)

起了一個新名字,也可以理解為\(a\)多了個名字,\(b\)就是\(a\)的別名。

於是,程式碼int &b=a的意義就是宣告\(b\)是一個整型變數的引用變數,其值被初始化為\(a\)

但是,引用變數在一個函式執行期間只能被唯一鎖定,不能再作為其他變數的引用名。

即以下程式碼是錯誤的:

int a1,a2;
int &b=a1;
int &b=a2;

引用變數在函式引數中的應用

剛剛已經提到,引用變數只是被引用變數的一個“別名”,實際上,它們是共用一個記憶體地址的。所以,當我們把引用變數作為函式形參的時候,實際上,實參傳給形參的是實參的地址,也就是說,實參和形參擁有相同的地址。如果形參改變了,實參也隨之改變。

我們可以這樣理解:當呼叫函式的時候,如果不用引用變數作為函式形參,那麼函式相當於把兩個實際引數複製了一遍傳給形參。也就是形參佔了兩個新的記憶體地址。所以在函式執行過程中,實參的值不會被改變。

但如果使用了引用變數,實參的值就會被改變。理由在上面已經說過了。