引用是c++引入的新語言特性,是c++常用的乙個重要內容之一,正確、靈活地使用引用,可以使程式簡潔、高效。
引用簡介
引用就是某一變數(目標)的乙個別名,對引用的操作與對變數直接操作完全一樣。
引用的宣告方法:型別識別符號 &引用名=目標變數名;
【例1】:int a; int &ra=a; //定義引用ra,它是變數a的引用,即別名 說明:
(1)&在此不是求位址運算,而是起標識作用。
(2)型別識別符號是指目標變數的型別。
(3)宣告引用時,必須同時對其進行初始化。
(4)引用宣告完畢後,相當於目標變數名有兩個名稱,即該目標原名稱和引用名,且不能再把該引用名作為其他變數名的別名。
ra=1; 等價於 a=1;
(5)宣告乙個引用,不是新定義了乙個變數,它只表示該引用名是目標變數名的乙個別名,它本身不是一種資料型別,因此引用本身不佔儲存單元,系統也不給引用分配儲存單元。故:對引用求位址,就是對目標變數求位址。
&ra與&a相等。
(6)不能建立陣列的引用。因為陣列是乙個由若干個元素所組成的集合,所以無法建立乙個陣列的別名(陣列不可以引用嗎?void function(int (&array)[5])方式的引用似乎是可以的,但是陣列中的元素是不可以為引用的)。
引用應用
1、引用作為引數
引用的乙個重要作用就是作為函式的引數。以前的c語言中函式引數傳遞是值傳遞,如果有大塊資料作為引數傳遞的時候,採用的方案往往是指標,因為這樣可以避免將整塊資料全部壓棧,可以提高程式的效率。但是現在(c++中)又增加了一種同樣有效率的選擇(在某些特殊情況下又是必須的選擇),就是引用。
【例2】:
1 void swap(int &p1, int &p2) //此處函式的形參p1, p2都是引用
2 為在程式中呼叫該函式,則相應的主調函式的呼叫點處,直接以變數作為實參進行呼叫即可,而不需要實參變數有任何的特殊要求。
如:對應上面定義的swap函式,相應的主調函式可寫為:
main()
說明: (1)以引用返回函式值,定義函式時需要在函式名前加&
(2)用引用返回乙個函式值的最大好處是,在記憶體中不產生被返回值的副本。
【例5】以下程式中定義了乙個普通的函式fn1(它用返回值的方法返回函式值),另外乙個函式fn2,它以引用的方法返回函式值。
1 #include
3 float temp; //定義全域性變數
4 tempfloat fn1(float r); //宣告函式
5 fn1float &fn2(float r); //宣告函式
7 fn2float fn1(float r)//定義函式fn1,它以返回值的方法返回函式值
8 12
13 float &fn2(float r)//定義函式fn2,它以引用方式返回函式值
14 18
19 void main() //主函式
20 {21 float a=fn1(10.0);22 //第1種情況,系統生成要返回值的副本(即臨時變數)
24 float &b=fn1(10.0);25 //第2種情況,可能會出錯(不同 c++系統有不同規定)26 //不能從被調函式中返回乙個臨時變數或區域性變數的引用
28 float c=fn2(10.0);29 //第3種情況,系統不生成返回值的副本30 //可以從被調函式中返回乙個全域性變數的引用
32 float &d=fn2(10.0);33 //第4種情況,系統不生成返回值的副本34 //可以從被調函式中返回乙個全域性變數的引用
35 cout<
C 中引用符號「 」的作用總結
今天在寫程式中用到了運算子過載,為了方便地輸出vector容器中的元素,我過載了 運算子。我是這麼寫的 templatestd ostream operator std ostream s,const std vector v 為在程式中呼叫該函式,則相應的主調函式的呼叫點處,直接以變數作為實參進行...
C 中的 引用符號全解
引用是c 引入的新語言特性,是c 常用的乙個重要內容之一,正確 靈活地使用引用,可以使程式簡潔 高效。我在工作中發現,許多人使用它僅僅是想當然,在某些微妙的場合,很容易出錯,究其原由,大多因為沒有搞清本源。故在本篇中我將對引用進行詳細討論,希望對大家更好地理解和使用引用起到拋磚引玉的作用。引用簡介 ...
C 中的 引用符號全解
引用是c 引入的新語言特性,是c 常用的乙個重要內容之一,正確 靈活地使用引用,可以使程式簡潔 高效。我在工作中發現,許多 人使用它僅僅是想當然,在某些微妙的場合,很容易出錯,究其原由,大多因為沒有搞清本源。故在本篇中我將對引用進行詳細討論,希望對大家更好地理解和使用引用起到拋引用是c 引入的新語言...