国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++ 引用與引用作為函數(shù)的參數(shù)

2019-11-06 07:12:23
字體:
供稿:網(wǎng)友

對一個數(shù)據(jù)建立一個“引用”,他的作用是為一個變量起一個別名。這是C++對C語言的一個重要補充。

如何建立一個引用

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

以上聲明了b是a的引用,并把a,b的值和它們的地址打印出來。經(jīng)過聲明后b是a別名,b與a代表的是同一個變量,占內(nèi)存中同一個存儲單元,具有同一地址。

注意&符號作為取地址符合作為引用聲明符的區(qū)別,在上述程序中的第2行,&在數(shù)據(jù)類型后,為引用聲明符。而第5、6行,&為取地址符。可以用這個方法作區(qū)分:只有在數(shù)據(jù)類型后&才是引用聲明符。

打印結(jié)果: 這里寫圖片描述

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

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

引用的作用:

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

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

舉個例子: 執(zhí)行swap函數(shù)后,想要主函數(shù)內(nèi)的變量值變化,用上述方式寫出代碼:

#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;}

運行結(jié)果: i = 3 j = 5

顯然值沒有帶回,i和j的值在執(zhí)行后沒有發(fā)生變化。

(2)傳遞變量的地址

該方式形參是指針變量,實參是一個變量的地址,調(diào)用函數(shù)時,形參得到的實參變量的地址,因此指向?qū)崊⒌淖兞繂卧?然后我們修改下上面的程序:

#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;}

運行結(jié)果: i = 5 j = 3

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

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

#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;}

運行結(jié)果: i = 5 j = 3

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


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 苍溪县| 泽州县| 新邵县| 祥云县| 太原市| 罗江县| 高碑店市| 库车县| 峡江县| 榆林市| 云林县| 泰来县| 奉化市| 黄冈市| 沅江市| 盐源县| 咸丰县| 微山县| 抚远县| 洱源县| 灵宝市| 台东市| 张北县| 栖霞市| 文昌市| 巴楚县| 巴彦淖尔市| 南开区| 南京市| 崇阳县| 怀远县| 泰州市| 浙江省| 任丘市| 留坝县| 苍山县| 鲁山县| 上饶市| 大埔县| 邵武市| 楚雄市|