淺談對引用變數的理解
阿新 • • 發佈:2020-07-25
淺談對引用變數的理解
本篇隨筆簡單記錄一下本蒟蒻對C++程式語言中引用變數的理解。
引用的概念
int a;
int b=a;
在上面的程式碼塊裡,\(a\)與\(b\)的值相等。(額
但是\(a,b\)指向的並不是同一塊記憶體空間,也就是,雖然\(a,b\)的值是相等的,但是其實他倆並不是同一個變數,因為他們的記憶體空間不一樣。只是他們儲存的值是一個值而已。
int a;
int &b=a;
在上面的程式碼塊裡,\(a,b\)的值相等。(額額額
但是\(a,b\)指向的是同一塊記憶體空間了。這就是“引用”的概念,就是這個新變數\(b\)完全和\(a\)相同,只是相當於給\(a\)
於是,程式碼int &b=a
的意義就是宣告\(b\)是一個整型變數的引用變數,其值被初始化為\(a\)。
但是,引用變數在一個函式執行期間只能被唯一鎖定,不能再作為其他變數的引用名。
即以下程式碼是錯誤的:
int a1,a2;
int &b=a1;
int &b=a2;
引用變數在函式引數中的應用
剛剛已經提到,引用變數只是被引用變數的一個“別名”,實際上,它們是共用一個記憶體地址的。所以,當我們把引用變數作為函式形參的時候,實際上,實參傳給形參的是實參的地址,也就是說,實參和形參擁有相同的地址。如果形參改變了,實參也隨之改變。
我們可以這樣理解:當呼叫函式的時候,如果不用引用變數作為函式形參,那麼函式相當於把兩個實際引數複製了一遍傳給形參。也就是形參佔了兩個新的記憶體地址。所以在函式執行過程中,實參的值不會被改變。
但如果使用了引用變數,實參的值就會被改變。理由在上面已經說過了。