C++ 引用

來源:互聯網
上載者:User

標籤: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++ 引用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.