C++ 中引用與指針的區(qū)別實(shí)例詳解
C++ 中引用與指針的區(qū)別實(shí)例詳解
引用是從C++才引入的,在C中不存在。為了搞清楚引用的概念,得先搞明白變量的定義及引用與變量的區(qū)別,變量的要素一共有兩個(gè):名稱(chēng)與空間。
引用不是變量,它僅僅是變量的別名,沒(méi)有自己獨(dú)立的空間,它只符合變量的“名稱(chēng)”這個(gè)要素,而“空間”這個(gè)要素并不滿(mǎn)足。換句話(huà)說(shuō),引用需要與它所引用的變量共享同一個(gè)內(nèi)存空間,對(duì)引用所做的改變實(shí)際上是對(duì)所引用的變量做出修改。并且引用在定義的時(shí)候就必須被初始化。
參數(shù)傳遞的類(lèi)型及相關(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)引用是變量的別名,沒(méi)有獨(dú)立的空間
(2) 引用需要與它引用的變量共享共間
(3) 對(duì)引用所做的改變實(shí)際上是對(duì)它所引用的變量做出改變
(4) 引用在定義的時(shí)候需要進(jìn)行初始化
(5) 引用一經(jīng)初始化不能重新引用其它變量。
見(jiàn)如下范例:
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ì)象。可以見(jiàn)下面的函數(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引用可以引用不同類(lèi)型的變量,但是將產(chǎn)生一個(gè)臨時(shí)變量。如下:
double a = 3.14; const int &ref = a; //OK,它產(chǎn)生的過(guò)程是: //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)訪(fǎng)問(wèn)引用是直接訪(fǎng)問(wèn),訪(fǎng)問(wèn)指針是間接訪(fǎng)問(wèn)。
(2)引用是變量的別名,本身不單獨(dú)分配自己的內(nèi)存空間,而指針擁有自己的內(nèi)存空間
(3) 引用一經(jīng)初始化,不能再引用其它變量,而指針可以
(4) 盡可以的使用引用,不得已時(shí)使用指針。
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
上一篇:Asp.Net 5分鐘實(shí)現(xiàn)網(wǎng)頁(yè)實(shí)時(shí)監(jiān)控
欄 目:ASP編程
下一篇:Webform 內(nèi)置對(duì)象 Session對(duì)象、Application全局對(duì)象,ViewState詳細(xì)介紹
本文標(biāo)題:C++ 中引用與指針的區(qū)別實(shí)例詳解
本文地址:http://mengdiqiu.com.cn/a1/ASPbiancheng/11340.html
您可能感興趣的文章
- 01-11解決ASP中http狀態(tài)跳轉(zhuǎn)返回錯(cuò)誤頁(yè)的問(wèn)題
- 01-11ASP程序中常用的腳本語(yǔ)言
- 01-11ASP中用select case代替其他語(yǔ)言中的switch case, default用case else
- 01-11asp的SQL語(yǔ)句中and和or同時(shí)使用的注意事項(xiàng)
- 01-11ASP中if語(yǔ)句、select 、while循環(huán)的使用方法
- 01-11asp畫(huà)中畫(huà)廣告插入在每篇文章中的實(shí)現(xiàn)方法
- 01-11ASP中解決“對(duì)象關(guān)閉時(shí),不允許操作?!钡脑幃悊?wèn)題……
- 01-11C++中頭文件和源文件詳細(xì)介紹
- 01-11詳解ABP框架中的日志管理和設(shè)置管理的基本配置
- 01-11C++ 中const修飾虛函數(shù)實(shí)例詳解


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹(shù)的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 01-11ASP實(shí)現(xiàn)加法驗(yàn)證碼
- 01-11ASP新手必備的基礎(chǔ)知識(shí)
- 01-11ASP腳本組件實(shí)現(xiàn)服務(wù)器重啟
- 01-11asp服務(wù)器如何搭建
- 01-11ASP實(shí)現(xiàn)類(lèi)似hashMap功能的類(lèi)
- 01-11ASP動(dòng)態(tài)網(wǎng)頁(yè)制作技術(shù)經(jīng)驗(yàn)分享
- 01-11解決ASP中http狀態(tài)跳轉(zhuǎn)返回錯(cuò)誤頁(yè)的問(wèn)
- 01-11ASP編碼必備的8條原則
- 01-11ASP中用select case代替其他語(yǔ)言中的sw
- 01-11ASP程序中常用的腳本語(yǔ)言
隨機(jī)閱讀
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-11Mac OSX 打開(kāi)原生自帶讀寫(xiě)NTFS功能(圖文
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 01-10delphi制作wav文件的方法
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 01-10C#中split用法實(shí)例總結(jié)
- 01-10SublimeText編譯C開(kāi)發(fā)環(huán)境設(shè)置
- 04-02jquery與jsp,用jquery