C 中的引用

2021-05-23 18:20:41 字數 1872 閱讀 4173

華清遠見嵌入式學院

講師。一、簡述:

引用是c++引入的新語言特性,是c++常用的乙個重要內容之一,正確、靈活地使用引用,可以使程式簡潔、高效。

概念:引用就是某一變數或目標的別名,對引用操作與對變數直接操作是完全一樣。

定義:定義引用的表示方法與定義指標相似,只是用&代替了*:

型別識別符號 &引用名=目標變數名;

例如: clock pt1(10,10,10); clock &pt2=pt1; 定義了pt2為pt1的引用。通過這樣的定義,pt1和pt2表示同一物件。

需要強調的是:

1)&在此不是求位址運算,而是起標識作用。

2)引用並不產生物件的副本,僅僅是物件的同義詞。

3)引用必須在定義時馬上被初始化,因為它必須是某個東西的同義詞。不能先定義乙個引用後才初始化它。

4)引用宣告完畢後,相當於目標變數名有兩個名稱,即該目標原名稱和引用名,且不能再把該引用名作為其他變數名的別名。

那麼既然引用只是某個變數或目標的別名,它有什麼用途呢?下面討論引用的兩個主要用途:作為函式引數以及從函式中返回左值。

二、引用引數

1、傳遞可變引數

傳統的c中,函式在呼叫時引數是通過值來傳遞的,這就是說函式的引數不具備返回值的能力。

void swap(int *a,int *b)

在c++中使用引用機制後,以上程式的c++版本為:

void swap(int &a,int &b)

呼叫該函式的c++方法為:swap(x,y); c++自動把x,y的位址作為引數傳遞給swap函式,較上例c語言程式而言,又減少了2個指標形參的開銷,這裡就可以很清晰的看到採用引用機制的作用和優點了。

2、給函式傳遞大型物件

當大型物件,如結構體物件等,被傳遞給函式時,使用引用引數可使引數傳遞效率得到提高,因為引用並不產生物件的副本,也就是引數傳遞時,物件無須複製。

const maxsize=100;

class set

//建構函式

friend set operator * (set ,set ) ; //過載運算符號*,用於計算集合的交集 用物件作為傳值引數

// friend set operator * (set & ,set & ) 過載運算符號*,用於計算集合的交集 用物件的引用作為傳值引數

...}

先考慮集合交集的實現

set operator *( set set1,set set2)

return res;

}由於過載運算子不能對指標單獨操作,我們必須把運算數宣告為 set 型別而不是 set * 。

每次使用*做交集運算時,整個集合都被複製,這樣效率很低。我們可以用引用來避免這種情況。

set operator *( set &set1,set &set2)

return res;

}三、引用返回值

如果乙個函式返回了引用,那麼該函式的呼叫也可以被賦值。這裡有一函式,它擁有兩個引用引數並返回乙個雙精度數的引用:

double &max(float &d1,float &d2)

引用總結:

(1)引用的目的主要用於在函式引數傳遞中,解決大塊資料或物件的傳遞效率和空間不如意的問題。

(2)用引用傳遞函式的引數,不會產生副本,提高傳遞的效率,參演在進行使用時通過const保證引用傳遞的安全性。

(3)引用與指標的區別是,指標通過某個指標變數指向乙個物件後,對它所指向的變數間接操作。程式中使用指標,程式的可讀性差;而引用本身就是目標變數的別名,對引用的操作就是對目標變數的操作。

(4)使用引用的時機。流操作符《和》、賦值操作符=的返回值、拷貝建構函式的引數、賦值操作符=的引數、其它情況都推薦使用引用。

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 常用的乙個重要內容之一,正確 靈活地使用引用,可以使程式簡潔 高效。我在工作中發現,許多人使用它僅僅是想當然,在某些微妙的場合,很容易出錯,究其原由,大多因為沒有搞清本源。故在本篇中我將對引用進行詳細討論,希望對大家更好地理解和使用引用起到拋磚引玉的作用。一 引用簡...