C 引用與引用作為函式的引數

2021-09-22 10:06:46 字數 1693 閱讀 5827

對乙個資料建立乙個「引用」,他的作用是為乙個變數起乙個別名。這是c++對c語言的乙個重要補充。

如何建立乙個引用

int a = 5;

int &b = a;

cout以上宣告了b是a的引用,並把a,b的值和它們的位址列印出來。經過宣告後b是a別名,b與a代表的是同乙個變數,佔記憶體中同乙個儲存單元,具有同一位址。

列印結果:

從上述結果可以看到,a與b位址是相同的。

使用引用的一些注意事項: 

(1)宣告乙個引用時,必須同時使之初始化,及宣告它代表哪乙個變數。(有乙個例外,引用作為函式引數時,不需要初始化) 

(2)在宣告乙個引用後,不能再使之作為另一變數的引用。 

(3)不能建立引用陣列。

引用的作用:

c++加入了在c語言的基礎加入了引用機制,那麼引用到底有什麼用呢?不會只是為了給函式起乙個小名吧?顯然不是,引用最用要的意義在於作為函式的引數,以擴充函式傳遞引數的能力。它是如何實現的?這要從c語言引數傳遞開始說起:

我們知道,c語言在呼叫函式時,傳參主要有兩種形式: 

(1)變數名作為實參和形參 

這種方式傳給形參的是變數的值,傳遞是單向的。如果在執行函式器件形參的值變了,不會回傳給實參。也就是說如果想要實現乙個這樣的功能:呼叫函式後實參的值隨之改變。顯然此方式無法實現。

舉個例子: 

執行swap函式後,想要主函式內的變數值變化,用上述方式寫出**:

#include using namespace std;

int main()

{ void swap(int ,int);

int i =3,j = 5;

swap(i,j);

cout<

i = 3

j = 5

顯然值沒有帶回,i和j的值在執行後沒有發生變化。

(2)傳遞變數的位址

#include using namespace std;

int main()

{ void swap(int * ,int*);

int i =3,j = 5;

swap(&i,&j);

cout<

i = 5 

j = 3

在程式的第13行,定義的函式的形參是指標,在第6行,呼叫的函式是傳入的函式實參是變數的位址,實現了i和j的交換,但是這種方法不夠直觀,而且依舊是「值傳遞」的方式,只不過傳遞的是變數的位址而已。

然後,如果我們使用引用功能,可以很簡單的實現這個功能,而且很容易理解: 

(3)引用作為函式引數

#include using namespace std;

int main()

{ void swap(int & ,int&);

int i =3,j = 5;

swap(i,j);

cout<

i = 5

j = 3

第13行,形參是宣告的引用,注意這個引用並沒有初始化,這就是上面提到的特例。而在第7行呼叫函式的過程中,實現了引用的初始化,這是傳入的實參就是變數,而不是數值,所以做到了真正意義上的「變數傳遞」。

C 引用與引用作為函式的引數

c 引用與引用作為函式的引數 參考 對乙個資料建立乙個 引用 他的作用是為乙個變數起乙個別名。這是c 對c語言的乙個重要補充。如何建立乙個引用 int a 5 int b a cout 列印結果 從上述結果可以看到,a與b位址是相同的。使用引用的一些注意事項 1 宣告乙個引用時,必須同時使之初始化,...

C 引用作為函式引數

有了變數名,為什麼還需要乙個別名呢?c 之所以增加引用型別,主要是把它作為函式引數,以擴充函式傳遞資料的功能。到目前為止我們介紹過函式引數傳遞的兩種情況。1 將變數名作為實參和形參 這時傳給形參的是變數的值,傳遞是單向的。如果在執行函式期間形參的值發生變化,並不傳回給實參。因為在呼叫函式時,形參和實...

C 引用作為函式引數

有了變數名,為什麼還需要乙個別名呢?c 之所以增加引用型別,主要是把它作為函式引數,以擴充函式傳遞資料的功能。一下是三種函式傳遞情況 1 將變數名作為實參和形參 這時傳給形參的是變數的值,傳遞是單向的。如果在執行函式期間形參的值發生變化,並不傳回給實參。因為在呼叫函式時,形參和實參不是同乙個儲存單元...