寫在前面:引用變數是乙個別名,也就是說,它是某個已存在變數的另乙個名字。一旦把引用初始化為某個變數,就可以使用該引用名稱或變數名稱來指向變數。
引用很容易與指標混淆,它們之間有三個主要的不同:
1.引用作為函式引數,以擴充函式傳遞資料的功能。例如:
#include usingnamespace
std; //
函式宣告
void swap(int& x, int&y);
intmain () //
函式定義
void swap(int& x, int&y)
交換前,a 的值: 100交換前,b 的值:
200交換後,a 的值:
200交換後,b 的值:
100
c++ 函式傳參:
(1)將變數名作為實參和形參。這時傳給形參的是變數的值,傳遞是單向的。如果在執行函式期間形參的值發生變化,並不傳回給實參。因為在呼叫函式時,形參和實參不是同乙個儲存單元。
(2) 傳遞變數的指標。形參是指標變數,實參是乙個變數的位址,呼叫函式時,形參(指標變數)指向實參變數單元。這種通過形參指標可以改變實參的值。
(3) c++提供了 傳遞變數的引用。形參是引用變數,和實參是乙個變數,呼叫函式時,形參(引用變數)指向實參變數單元。這種通過形參引用可以改變實參的值。
如果上面的例子不用引用型別作為引數的話:
#include usingnamespace
std; //
函式宣告
void swap(int x, int
y);int
main () //
函式定義
void swap(int x, int
y)
交換前,a 的值:100交換前,b 的值:
200交換後,a 的值:
100交換後,b 的值:
200
2.引用作為返回值
當函式返回乙個引用時,則返回乙個指向返回值的隱式指標。這樣,函式就可以放在賦值語句的左邊。例如:
#include usingnamespace
std;
double vals = ;
double& setvalues( int
i )
intmain ()
setvalues(
1) = 20.23; //
改變第 2 個元素
setvalues(3) = 70.8; //
改變第 4 個元素
cout
<< "
改變後的值
"
return0;
}
改變前的值vals[
0] = 10.1
vals[
1] = 12.6
vals[
2] = 33.1
vals[
3] = 24.1
vals[
4] = 50
改變後的值
vals[
0] = 10.1
vals[
1] = 20.23
vals[
2] = 33.1
vals[
3] = 70.8
vals[
4] = 50
當返回乙個引用時,要注意被引用的物件不能超出作用域。所以返回乙個對區域性變數的引用是不合法的,但是,可以返回乙個對靜態變數的引用。
int&func()
參考:
C 中的引用
最近重新看c 看到些以前沒注意的dd,溫故而知新,暫且記下。引用是能自動間接引用的一種指標,即不必使用間接引用運算子 就可以得到乙個引用值。引用可以為變數起別名,它主要用作函式引數以及函式的返回型別。1 引用的定義 如 int i int j i j是i的引用。1 定義引用時,必須立即對它進行初始化...
C 中的引用
例1 int a int ra a 定義引用ra,它是變數a的引用,即別名 說明 1 在此不是求位址運算,而是起標識作用。2 型別識別符號是指目標變數的型別。3 宣告引用時,必須同時對其進行初始化。4 引用宣告完畢後,相當於目標變數名有兩個名稱,即該目標原名稱和引用名,且不能再把該引用名作為其他變數...
C 中的引用
引用是c 引入的新語言特性,是c 常用的乙個重要內容之一,正確 靈活地使用引用,可以使程式簡潔 高效。我在工作中發現,許多人使用它僅僅是想當然,在某些微妙的場合,很容易出錯,究其原由,大多因為沒有搞清本源。故在本篇中我將對引用進行詳細討論,希望對大家更好地理解和使用引用起到拋磚引玉的作用。一 引用簡...