本篇內(nèi)容主要講解“C++的引用和指針有哪些區(qū)別”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“C++的引用和指針有哪些區(qū)別”吧!
創(chuàng)新互聯(lián)公司長期為千余家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為資溪企業(yè)提供專業(yè)的網(wǎng)站制作、網(wǎng)站設(shè)計(jì),資溪網(wǎng)站改版等技術(shù)服務(wù)。擁有10年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
引用和指針有如下三種區(qū)別:
1 引用必須在聲明時(shí)初始化,而指針不用;
2 對(duì)于NULL不能引用,而指針可以指向NULL;
3 引用一旦聲明,引用的對(duì)象不能改變(但對(duì)象的值可以改變);而指針可以隨時(shí)改變指向的對(duì)象。
引用能做到的,指針也可以,但指針更危險(xiǎn);
(1)引用被創(chuàng)建的同時(shí)必須被初始化(指針則可以在任何時(shí)候被初始化)。
(2)不能有NULL引用,引用必須與合法的存儲(chǔ)單元關(guān)聯(lián)(指針則可以是NULL)。
(3)一旦引用被初始化,就不能改變引用的關(guān)系(指針則可以隨時(shí)改變所指的對(duì)象)。
從上面的區(qū)別看,引用比指針安全。從編譯器的角度看,引用僅僅是一個(gè)更為安全的指針。正是因?yàn)橹羔樂浅l`活,導(dǎo)致指針在編程時(shí)出錯(cuò)的可能性也很大,可以這樣說指針是C++中最危險(xiǎn)的。為了在不犧牲性能的情況下,更安全的利用指針特性,C++引入了引用。
從上面的區(qū)別可看出,兩者的區(qū)別全部表現(xiàn)為對(duì)指針的一個(gè)靈活特性進(jìn)行限制,如初始化、合法地址、重新賦值的限制。
下面逐條給予更多的解釋:
1)為確保引用對(duì)象的有效性。
引用變量聲明是必須初始化,卻語言盡可能限制引用變量的有效性。但是注意:語言僅是盡可能保證,并不能完全保證引用時(shí)刻有效。因?yàn)榫幾g器做不到這點(diǎn)。
如:
a)引用對(duì)象被無意析構(gòu);常表現(xiàn)為返回臨時(shí)變量的引用;引用變量的生存期比引用變量短;
b)用于初始化引用變量的變量并未被構(gòu)造,這主要是因?yàn)槭褂弥羔槼跏蓟米兞繉?dǎo)致,
如:
int* p=NULL; int& temp = *p;
上面的語句是有效的,但是引用變量是無效的。
上面的解釋說明了,引用雖然是安全的指針,但是并非絕對(duì)安全。引用使用不當(dāng),同樣是致命的。根據(jù)C++標(biāo)準(zhǔn),無效引用將產(chǎn)生“不確定行為”。可能是出于性能方面的考慮,標(biāo)準(zhǔn)并未提供判斷引用時(shí)候有效的辦法(據(jù)通過假定引用變量時(shí)刻有效,減少判斷有效性的性能損失)。
2)引用變量的值不能改變。
這個(gè)假定同樣是為減少指針的誤用。也就是說使用引用變量時(shí)不必?fù)?dān)心出現(xiàn)同一個(gè)引用變量前后所指向的實(shí)際對(duì)象發(fā)生改變的可能。
那什么時(shí)候使用引用呢?
理論上,除下面兩種情況外,都可以使用引用來替代指針(引用更安全)
一是你考慮到存在不指向任何對(duì)象的可能,在這種情況下,你能夠設(shè)置指針為空;
二是你需要能夠在不同的時(shí)刻指向不同的對(duì)象,在這種情況下,你能改變指針的指向。
***給大家一個(gè)例子,幫助理解一下。
class Time//定義一個(gè)類Time { public://數(shù)據(jù)成員是公有的 int hour; int minute; } Time t,*p;//定義一個(gè)類的對(duì)象t,和 Time類的指針變量p p=&t;//指針指向?qū)ο髏,&稱引用,也指指針p指向了t的地址 cout<<p->hour;//輸出指針指向的對(duì)象hour
到此,相信大家對(duì)“C++的引用和指針有哪些區(qū)別”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
本文名稱:C++的引用和指針有哪些區(qū)別
文章出自:http://www.chinadenli.net/article20/pejejo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、Google、網(wǎng)頁設(shè)計(jì)公司、網(wǎng)站排名、網(wǎng)站維護(hù)、靜態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)