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

首頁(yè) > 編程 > ASP > 正文

詳解C++ 中引用與指針的區(qū)別

2024-05-04 11:05:12
字體:
供稿:網(wǎng)友

當(dāng)我們將一個(gè)指針作為參數(shù)傳遞給一個(gè)方法時(shí),實(shí)際上是把一個(gè)指針副本傳遞給該方法,或者我們可以說傳遞指針是指針的值傳遞,錯(cuò)新技術(shù)頻道小編為大家敘述詳解C++ 中引用與指針的區(qū)別,快來看看吧!

C++ 中引用與指針的區(qū)別實(shí)例詳解

引用是從C++才引入的,在C中不存在。為了搞清楚引用的概念,得先搞明白變量的定義及引用與變量的區(qū)別,變量的要素一共有兩個(gè):名稱與空間。

??????? 引用不是變量,它僅僅是變量的別名,沒有自己獨(dú)立的空間,它只符合變量的“名稱”這個(gè)要素,而“空間”這個(gè)要素并不滿足。換句話說,引用需要與它所引用的變量共享同一個(gè)內(nèi)存空間,對(duì)引用所做的改變實(shí)際上是對(duì)所引用的變量做出修改。并且引用在定義的時(shí)候就必須被初始化。

??????? 參數(shù)傳遞的類型及相關(guān)要點(diǎn):

??????? 1 按值傳遞:形參不能修改實(shí)參的值,實(shí)參要初始化形參,需要分配空間,然后將實(shí)參內(nèi)容copy至形參中。
??????? 2 引用傳遞:實(shí)參初始化形參時(shí)不需要分配空間。
??????? 3 指針傳遞:本質(zhì)還是按值傳遞,在實(shí)參初始化形參時(shí),還是需要分配空間的。如果需要修改指針的地址,單純用指針傳遞也是不行的,必須用**或*&

??????? 下面討論引用的相關(guān)內(nèi)容:

??????? 1 引用的概念
??????? 2 const引用
??????? 3 引用作為參數(shù)傳遞
??????? 4 引用作為函數(shù)返回值
??????? 5 引用與指針的區(qū)別

??????? 1 引用的概念

??????? 牢記下面這幾個(gè)要點(diǎn)即可:

??????? (1)引用是變量的別名,沒有獨(dú)立的空間
??????? (2) 引用需要與它引用的變量共享共間
??????? (3) 對(duì)引用所做的改變實(shí)際上是對(duì)它所引用的變量做出改變
??????? (4) 引用在定義的時(shí)候需要進(jìn)行初始化
??????? (5) 引用一經(jīng)初始化不能重新引用其它變量。

??????? 見如下范例:

int main(void) {   int val = 100;   //int &refval;<span style="white-space:pre">    </span>//Error,引用必須初始化   int &refval = val;    cout << "val="<< val << endl;   refval = 200;  <span style="white-space:pre"> </span>//實(shí)際對(duì)val變量進(jìn)行了改變   cout << "val=" << val << endl;    int val2 = 500;   refval = val2; <span style="white-space:pre"> </span>//這不代表對(duì)refval引用至val2這個(gè)變量,         //僅僅代表將val2賦值給refval,即val.   cout << "val=" << val << endl;    return 0; } 

??????? 2 const引用

??????? const引用要點(diǎn)如下:

??????? (1) 顧名思義,const引用是指向const對(duì)象的引用.

??????? (2) const引用可以引用非const對(duì)象,但非const引用不能引用const對(duì)象。可以見下面的函數(shù)例子.

int a = 200; const int &ref = a; //OK  const int b = 100; int &ref2 = b; //Error,  

??????? (3) const引用的對(duì)象值是常量,不能修改。

const int a = 200; const int &ref = a; ref = 100; //Error,引用的對(duì)象是常量,不能被修改 

??????? (4) const引用可以引用不同類型的變量,但是將產(chǎn)生一個(gè)臨時(shí)變量。如下:

double a = 3.14; const int &ref = a; //OK,它產(chǎn)生的過程是:                //int tmp = a; 生成臨時(shí)變量tmp,數(shù)據(jù)可能被截短。                //const int &ref = tmp;引用的實(shí)際上是臨時(shí)變量 

??????? 3 引用作為參數(shù)傳遞

??????? 引用作為參數(shù)傳遞是參數(shù)傳遞的其中一種。它在實(shí)參初始化形參時(shí)不需要分配內(nèi)存空間,下面是例子:

void swap(int &a, int &b ) {   int tmp = a;   a = b;   b = tmp; }  int main() {   int x = 20;   int y = 30;   swap( x, y );   cout << x << endl; //x = 30;   cout << y << endl; //y = 20; } 

??????? 4 引用作為函數(shù)返回值

??????? 先列出范例,如下:

int a[] = {1,2,3,4,5,6,7,8,9,0};  int &index(int i) {   return a[i]; }  int main() {   index(3) = 100;   cout << a[3] << endl; //output: 100  } 

??????? 這是引用的另一個(gè)作用,可以將函數(shù)放在賦值運(yùn)算符的左邊。index函數(shù)返回a[]的引用,對(duì)引用所做的改變將修改變量自身,所以a[3]被修改成100.?????

??????? 5 引用與指針的區(qū)別?

?????? (1)訪問引用是直接訪問,訪問指針是間接訪問。
??????? (2)引用是變量的別名,本身不單獨(dú)分配自己的內(nèi)存空間,而指針擁有自己的內(nèi)存空間
??????? (3) 引用一經(jīng)初始化,不能再引用其它變量,而指針可以
??????? (4) 盡可以的使用引用,不得已時(shí)使用指針。

感謝大家閱讀詳解C++ 中引用與指針的區(qū)別,希望能幫助到大家,謝謝大家對(duì)錯(cuò)新技術(shù)頻道網(wǎng)的支持!

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 房产| 广灵县| 阿尔山市| 南靖县| 米脂县| 岑溪市| 家居| 遵义县| 台中市| 昌乐县| 富平县| 馆陶县| 潞西市| 武邑县| 屯门区| 九龙县| 普宁市| 萍乡市| 互助| 鄯善县| 安义县| 伊川县| 高雄县| 即墨市| 巨鹿县| 柏乡县| 上杭县| 常德市| 塘沽区| 固阳县| 阜南县| 柘荣县| 新巴尔虎右旗| 凯里市| 利津县| 大港区| 汾阳市| 奉新县| 宜都市| 柳江县| 长沙县|