標籤:c++ 引用
C++的引用個人感覺像是C#/Java等進階語言的傳址的開端。也是C的指標概念上的一個拓展。現對C++引用進行一定的介紹:
一 , 引用的申明
#include <iostream>using namespace std;int main(){ int a = 1; int &po = a; po = 2; cout << "a的值為 :" << a << endl; return 0;}
得到的結果為:
650) this.width=650;" title="01.png" src="https://s1.51cto.com/wyfs02/M01/92/F2/wKiom1kFsUfRXBwRAAAlMD7sP2E381.png-wh_500x0-wm_3-wmp_4-s_254484745.png" alt="wKiom1kFsUfRXBwRAAAlMD7sP2E381.png-wh_50" />
可以看到 , 當對po進行賦值2的時候,a的值也變為了2.其實po和a指向的是同一塊記憶體。這裡po和指標(*)很像。
引用(&)和 指標(*)的區別:
① ,引用& 申明時就必須初始化。如聲明int的引用 int &po = a;直接要為其賦值a(int類型)。
② ,引用沒有地址的概念(沒有儲存地址 , 而是直接指向內容 , 所以它的效率比指標要高)。
二 , 其他類型的引用申明
①:數組:
#include <iostream>using namespace std;int main(){ int a[2][3]; int (&po)[2][3] = a;//申明一個引用,必須要對其進行初始化 po[0][1] = 3; cout << "a[0][1]的值為:" << *((*a)+1) << endl; return 0;}
得到的結果為:
650) this.width=650;" title="02.png" src="https://s1.51cto.com/wyfs02/M00/92/F0/wKioL1kFuJCDO17LAAAcxD_HEoM576.png-wh_500x0-wm_3-wmp_4-s_349069155.png" alt="wKioL1kFuJCDO17LAAAcxD_HEoM576.png-wh_50" />
注意數位引用申明
②:指標:
#include <iostream>using namespace std;int main(){ int a = 4; int *p = &a; int * (&po) = p; *po = 5;//此時 , 引用po和指標p的用法是一樣的 cout << "a的值為:" << *p << endl; cout << "a的值為:" << *po << endl; return 0;}
執行結果為:
650) this.width=650;" title="03.png" src="https://s5.51cto.com/wyfs02/M02/92/F1/wKioL1kFwTnj1FPQAAAZOhBTCLY048.png-wh_500x0-wm_3-wmp_4-s_2688356029.png" alt="wKioL1kFwTnj1FPQAAAZOhBTCLY048.png-wh_50" />
關於結構體的申明和int是一樣的額
(重點)關於引用參數:
#include <iostream>using namespace std;void fun( int &a){ a = 2;}int main(){ int a = 1; fun(a); cout << "a的值為 : " << a << endl; return 0;}
fun函數如果用C#來寫的話 , 應該是 fun( ref int a ), 和C#一樣,當對fun的參數a進行重賦值時,main中實參a的值也會發生改變這和C的指標效果是一樣的,不一樣的是:
C++傳引用比C傳指標的效率要高 , 因為引用沒有儲存地址,它直接指向內容。我把C的傳指標實現一下:
#include <iostream>using namespace std;void fun( int *a){ *a = 2;}int main(){ int a = 1; fun(&a); cout << "a的值為 : " << a << endl; return 0;}
當然 , 如果要使用C++的話 , 最好是用引用 , 效率高啊。。。。
本文出自 “Better_Power_Wisdom” 部落格,請務必保留此出處http://aonaufly.blog.51cto.com/3554853/1920837
C++ 引用