引用
引用是一個目標(biāo)變量的別名。對引用的一切操作和對變量的直接操作是一樣的。引用的聲明如下:
【數(shù)據(jù)類型】【&】【定義的引用名稱】=【目標(biāo)變量名】;
引用不是一種數(shù)據(jù)類型,并不占存儲單元,沒有數(shù)組的引用。
引用的作用:
- 可用做函數(shù)參數(shù)。引用作為參數(shù)傳遞給函數(shù)時,在內(nèi)存中并沒有產(chǎn)生變量實(shí)體的副本,它只是源目標(biāo)變量的一個別名。
- 常引用。
const 【數(shù)據(jù)類型標(biāo)識符】&【引用名】=【目標(biāo)變量名】;
這樣的好處是可以不用擔(dān)心變量的值被別名以為的改掉。char x=1; const char &rx=x; rx=2; //錯誤:rx是只讀的 x=2; //正確
- 引用作為函數(shù)返回值。
【數(shù)據(jù)類型】&【函數(shù)名】(形參列表){函數(shù)體}
實(shí)例:
#include<iostream> using namespace std; int temp; //全局變量temp; int f1(int x) { temp=(int)(x*x); return temp; } int &f2(int x) { temp=(int)(x*x); return temp; } int main() { int a=f1(5);//系統(tǒng)生產(chǎn)成返回值的副本 int b=f2(5);//系統(tǒng)不生成返回值的副本,可以從被調(diào)函數(shù)中返回一個全局變量的引用 int &c=f2(5);//系統(tǒng)不生成返回值的副本,可以從被調(diào)函數(shù)中返回一個全局變量的引用 cout<<a<<endl; cout<<b<<endl; cout<<c<<endl; getchar(); }
注意:不能返回局部變量的值。局部變量在被函數(shù)調(diào)用返回后就被銷毀。那么它返回的引用所指向的內(nèi)存已經(jīng)沒有任何意義,運(yùn)行時會出現(xiàn)不可預(yù)知的錯誤。
#include<iostream> using namespace std; int &f1(int x) { int tmp; tmp=x; cout<<"In f1:"<<endl; cout<<"&tmp is:"<<&tmp<<endl; cout<<"tmp is:"<<tmp<<endl<<endl; return tmp; } int main() { int &a=f1(5); a=9; cout<<"In main:"<<endl; cout<<"&a is:"<<&a<<endl; cout<<"a is:"<<a<<endl; getchar(); return 0; }
結(jié)果:
在f1結(jié)束后tmp的內(nèi)存就已經(jīng)釋放,a是tmp的別名雖然還是指向了那段內(nèi)存,但是已經(jīng)沒有任何意義了。
注意:
- 不能返回函數(shù)內(nèi)部new分配的內(nèi)存引用。因?yàn)楸缓瘮?shù)返回的引用只是作為臨時變量出現(xiàn)的,沒有被賦予一個實(shí)際的變量空間,所以這個引用所指向的空間就無法釋放,造成內(nèi)存泄露。
- 可以返回類成員的引用,但最好是const。
posted on 2011-02-04 22:52 Geek.tan 閱讀(148) 評論(0) 編輯 收藏 引用 所屬分類: C++