引用的聲明: 數據類型 & 引用名 = 初始值(初始值爲變量名)
C++中引用就是起別名的意思,聲明一個引用並非定義一個新的變量。編譯器會給他分配內存空間,所以引用自己佔據內存空間,可是引用表現給用戶看到的並非引用自身的地址。
//以下程序函數
int ee = 100; int ff = 200; int &aa = ee; int &bb = ff; cout << "ee地址" << &ee << " ee值" << ee << endl; cout << "ff地址" << &ff << " ff值" << ff << endl; cout << "aa地址" << &aa << " aa值" << aa << endl; cout << "bb地址" << &bb << " bb值" << bb << endl;
從中能夠看到,引用的地址跟變量是同樣,可是在真實內存中,引用與變量是分開存放的,對引用的操做有點相似與指針,但又不徹底同樣。
當引用做爲函數的參數時,有以下特色:
一、在進行實參和形參結合時,不會爲形參分配內存空間,而是將形參做爲實參的一個別名。使用引用傳遞函數參數時,內存中並無產生實參的副本,他是直接對實參進行操做(相似指針);而使用通常變量傳遞函數參數時,當發生函數調用時,須要給形參分配存儲單元,形參變量是實參變量的副本。所以,當參數傳遞的數據較大時,用引用比用通常變量傳遞參數的效率高,且佔用空間小。
二、用引用能達到指針傳遞同樣的效果,函數內對形參的操做至關與直接對實參的操做;
//引用做爲形參spa
void swap(int & a, int &b) { int map = a; a = b; b = map; cout << "a地址" << &a << " a值" << a << endl; cout << "b地址" << &b << " b值" << b << endl; } int main(void) { int ee = 100; int ff = 200; cout << "ee地址" << &ee << " ee值" << ee << endl; cout << "ff地址" << &ff << " ff值" << ff << endl; swap(ee, ff); cout << "ee地址" << &ee << " ee值" << ee << endl; cout << "ff地址" << &ff << " ff值" << ff << endl; return 0; }
//對比指針指針
void swap(int * a, int *b) { int map = *a; *a = *b; *b = map; cout << "a地址" << &a << " a值" << a << endl; cout << "b地址" << &b << " b值" << b << endl; } int main(void) { int ee = 100; int ff = 200; cout << "ee地址" << &ee << " ee值" << ee << endl; cout << "ff地址" << &ff << " ff值" << ff << endl; swap(&ee,&ff); cout << "ee地址" << &ee << " ee值" << ee << endl; cout << "ff地址" << &ff << " ff值" << ff << endl; return 0; }
從中能夠看出指針和引用的類似與區別。
//函數參數爲通常變量;code
void swap(int a, int b) { int map = a; a = b; b = map; cout << "a地址" << &a << " a值" << a << endl; cout << "b地址" << &b << " b值" << b << endl; } int main(void) { int ee = 100; int ff = 200; cout << "ee地址" << &ee << " ee值" << ee << endl; cout << "ff地址" << &ff << " ff值" << ff << endl; swap(ee,ff); cout << "ee地址" << &ee << " ee值" << ee << endl; cout << "ff地址" << &ff << " ff值" << ff << endl; return 0; }
經過對比能夠發現利用指針和引用的優點。
引用一樣能夠運用在函數返回
//函數返回引用類型blog
int& fun(int & num) { return num; } int main(void) { int aa, bb; aa = fun(bb); cout << aa << " " << bb << endl; return 0; }
//函數返回指針類型ip
int* fun(int * num) { return num; } int main(void) { int aa, bb; aa = *fun(&bb); cout << aa << " " << bb << endl; return 0; }
----------------------結束語---------------------------內存
因此之後寫程序優先考慮用引用,其次是指針,最後通常變量。