c++ 引用與引用作為函式的引數
參考:對乙個資料建立乙個「引用」,他的作用是為乙個變數起乙個別名。這是c++對c語言的乙個重要補充。
如何建立乙個引用
int a = 5;
int &b = a;
cout
<
<
列印結果:
從上述結果可以看到,a與b位址是相同的。
使用引用的一些注意事項:
(1)宣告乙個引用時,必須同時使之初始化,及宣告它代表哪乙個變數。(有乙個例外,引用作為函式引數時,不需要初始化)
(2)在宣告乙個引用後,不能再使之作為另一變數的引用。
(3)不能建立引用陣列。
引用的作用:
c++加入了在c語言的基礎加入了引用機制,那麼引用到底有什麼用呢?不會只是為了給函式起乙個小名吧?顯然不是,引用最用要的意義在於作為函式的引數,以擴充函式傳遞引數的能力。它是如何實現的?這要從c語言引數傳遞開始說起:
我們知道,c語言在呼叫函式時,傳參主要有兩種形式:
(1)變數名作為實參和形參
這種方式傳給形參的是變數的值,傳遞是單向的。如果在執行函式器件形參的值變了,不會回傳給實參。也就是說如果想要實現乙個這樣的功能:呼叫函式後實參的值隨之改變。顯然此方式無法實現。
舉個例子:
執行swap函式後,想要主函式內的變數值變化,用上述方式寫出**:
#include
using
namespace
std;
int main()
void swap(int a,int b)
執行結果:
i = 3
j = 5
顯然值沒有帶回,i和j的值在執行後沒有發生變化。
#include
using
namespace
std;
int main()
void swap(int *a,int *b)
執行結果:
i = 5
j = 3
在程式的第13行,定義的函式的形參是指標,在第6行,呼叫的函式是傳入的函式實參是變數的位址,實現了i和j的交換,但是這種方法不夠直觀,而且依舊是「值傳遞」的方式,只不過傳遞的是變數的位址而已。
然後,如果我們使用引用功能,可以很簡單的實現這個功能,而且很容易理解:
(3)引用作為函式引數
#include
using
namespace
std;
int main()
void swap(int &a,int &b)
執行結果:
i = 5
j = 3
第13行,形參是宣告的引用,注意這個引用並沒有初始化,這就是上面提到的特例。而在第7行呼叫函式的過程中,實現了引用的初始化,這是傳入的實參就是變數,而不是數值,所以做到了真正意義上的「變數傳遞」。
C 引用與引用作為函式的引數
對乙個資料建立乙個 引用 他的作用是為乙個變數起乙個別名。這是c 對c語言的乙個重要補充。如何建立乙個引用 int a 5 int b a cout以上宣告了b是a的引用,並把a,b的值和它們的位址列印出來。經過宣告後b是a別名,b與a代表的是同乙個變數,佔記憶體中同乙個儲存單元,具有同一位址。列印...
C 引用作為函式引數
有了變數名,為什麼還需要乙個別名呢?c 之所以增加引用型別,主要是把它作為函式引數,以擴充函式傳遞資料的功能。到目前為止我們介紹過函式引數傳遞的兩種情況。1 將變數名作為實參和形參 這時傳給形參的是變數的值,傳遞是單向的。如果在執行函式期間形參的值發生變化,並不傳回給實參。因為在呼叫函式時,形參和實...
C 引用作為函式引數
有了變數名,為什麼還需要乙個別名呢?c 之所以增加引用型別,主要是把它作為函式引數,以擴充函式傳遞資料的功能。一下是三種函式傳遞情況 1 將變數名作為實參和形參 這時傳給形參的是變數的值,傳遞是單向的。如果在執行函式期間形參的值發生變化,並不傳回給實參。因為在呼叫函式時,形參和實參不是同乙個儲存單元...