C++ 引用與引用作為函數的參數__Jquery

來源:互聯網
上載者:User

對一個資料建立一個“引用”,他的作用是為一個變數起一個別名。這是C++對C語言的一個重要補充。

如何建立一個引用

    int a = 5;    int &b = a;    cout<<a<<endl;    cout<<b<<endl;    cout<<&a<<endl;    cout<<&b<<endl;

以上聲明了b是a的引用,並把a,b的值和它們的地址列印出來。經過聲明後b是a別名,b與a代表的是同一個變數,占記憶體中同一個儲存單元,具有同一地址。

注意&符號作為取地址符合作為引用聲明符的區別,在上述程式中的第2行,&在資料類型後,為引用聲明符。而第5、6行,&為取地址符。可以用這個方法作區分:只有在資料類型後&才是引用聲明符。

列印結果:

從上述結果可以看到,a與b地址是相同的。

使用引用的一些注意事項:
(1)聲明一個引用時,必須同時使之初始化,及聲明它代表哪一個變數。(有一個例外,引用作為函數參數時,不需要初始化)
(2)在聲明一個引用後,不能再使之作為另一變數的引用。
(3)不能建立引用數組。

引用的作用:

C++加入了在C語言的基礎加入了引用機制,那麼引用到底有什麼用呢。不會只是為了給函數起一個小名吧。顯然不是,引用最用要的意義在於作為函數的參數,以擴充函數傳遞參數的能力。它是如何?的。這要從C語言參數傳遞開始說起:

我們知道,C語言在調用函數時,傳參主要有兩種形式:
(1)變數名作為實參和形參
這種方式傳給形參的是變數的值,傳遞是單向的。如果在執行函數器件形參的值變了,不會回傳給實參。也就是說如果想要實現一個這樣的功能:調用函數後實參的值隨之改變。顯然此方式無法實現。

舉個例子:
執行swap函數後,想要主函數內的變數值變化,用上述方式寫出代碼:

#include <iostream>using namespace std;int main(){      void swap(int ,int);      int i =3,j = 5;      swap(i,j);      cout<<"i="<<i<<endl<<"j="<<j<<endl;      getchar();      return 0;}void swap(int a,int b){    int temp;    temp = a;    a =b;    b= temp;}

運行結果:
i = 3
j = 5

顯然值沒有帶回,i和j的值在執行後沒有發生變化。

(2)傳遞變數的地址

該方式形參是指標變數,實參是一個變數的地址,調用函數時,形參得到的實參變數的地址,因此指向實參的變數單元。
然後我們修改下上面的程式:

#include <iostream>using namespace std;int main(){      void swap(int * ,int*);      int i =3,j = 5;      swap(&i,&j);     cout<<"i="<<i<<endl<<"j="<<j<<endl;      getchar();      return 0;}void swap(int *a,int *b){    int temp;    temp = *a;    *a =*b;    *b= temp;}

運行結果:
i = 5
j = 3

在程式的第13行,定義的函數的形參是指標,在第6行,調用的函數是傳入的函數實參是變數的地址,實現了i和j的交換,但是這種方法不夠直觀,而且依舊是“值傳遞”的方式,只不過傳遞的是變數的地址而已。

然後,如果我們使用引用功能,可以很簡單的實現這個功能,而且很容易理解:
(3)引用作為函數參數

#include <iostream>using namespace std;int main(){      void swap(int & ,int&);      int i =3,j = 5;      swap(i,j);     cout<<"i="<<i<<endl<<"j="<<j<<endl;      getchar();      return 0;}void swap(int &a,int &b){    int temp;    temp = a;    a =b;    b= temp;}

運行結果:
i = 5
j = 3

第13行,形參是聲明的引用,注意這個引用並沒有初始化,這就是上面提到的特例。而在第7行調用函數的過程中,實現了引用的初始化,這是傳入的實參就是變數,而不是數值,所以做到了真正意義上的“變數傳遞”。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.