


下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、c +中引用(& )的用法和應(yīng)用實(shí)例對(duì)于習(xí)慣使用C進(jìn)行開發(fā)的朋友們,在看到c+ +中出現(xiàn)的&符號(hào),可能會(huì)犯迷糊,因?yàn)樵贑 語言中這個(gè)符號(hào)表示了取地址符,但是在C + +中它卻有著不同的用途,掌握C+的&符號(hào),是提高代碼執(zhí)行效率和增強(qiáng)代碼質(zhì)量的一個(gè)很好的辦法。在c + +學(xué)習(xí)提高篇(3)-隱式指針的文章中我詳細(xì)介紹了在隱式指針&的用法,其實(shí)這兩個(gè)概念是統(tǒng)一的。引用是C+ +引入的新語言特性, 是C +常用的一個(gè)重要內(nèi)容之一,正確、靈活地使用引用,可以使程序簡(jiǎn)潔、高效。我在工作中發(fā)現(xiàn),許多人使用它僅僅 是想當(dāng)然,在某些微妙的場(chǎng)合, 很容易出錯(cuò),究其原由, 大多因?yàn)闆]
2、有搞清本源。 故在本篇中我將對(duì)引用進(jìn)行詳細(xì)討論,希 望對(duì)大家更好地理解和使用引用起到拋磚引玉的作用。一、引用簡(jiǎn)介引用就是某一變量(目標(biāo))的一個(gè)別名,對(duì)引用的操作與對(duì)變量直接操作完全一樣。引用的聲明方法:類型標(biāo)識(shí)符&引用名=目標(biāo)變量名;【例1 : in t a; in t & f a= a; / /定義引用f a,它是變量a的引用,即別名說明:(1 )&在此不是求地址運(yùn)算,而是起標(biāo)識(shí)作用。(2)類型標(biāo)識(shí)符是指目標(biāo)變量的類型。聲明引用時(shí),必須同時(shí)對(duì)其進(jìn)行初始化。(4 )引用聲明完畢后,相當(dāng)于目標(biāo)變量名有兩個(gè)名稱,即該目標(biāo)原名稱和引用名,且不能再把該引用名作為其他變量名的別名
3、。ra = 1 ;等價(jià)于 a=1;(5 )聲明一個(gè)引用,不是新定義了一個(gè)變量,它只表示該引用名是目標(biāo)變量名的一個(gè)別名, 它本身不是一種數(shù)據(jù)類型, 因此引用本身不占存儲(chǔ)單元, 系統(tǒng)也不給引用分配存儲(chǔ)單元。故:對(duì)引用求地址,就是對(duì)目標(biāo)變量求地址。 &ra與&a相等。(6)不能建立數(shù)組的引用。因?yàn)閿?shù)組是一個(gè)由若干個(gè)元素所組成的集合,所以無法建立 一個(gè)數(shù)組的別名。二、引用應(yīng)用1、引用作為參數(shù)引用的一個(gè)重要作用就是作為函數(shù)的參數(shù)。以前的C語言中函數(shù)參數(shù)傳遞是值傳遞 ,如果有大塊數(shù)據(jù)作為參數(shù)傳遞的時(shí)候,采用的方案往往是指針,因?yàn)檫@樣可以避免將整塊數(shù)據(jù)全部壓棧,可以提高程序的效率。但是現(xiàn)在(
4、C+ +中)又增加了一種同樣有效率的選擇(在某些特殊情況下又是必須的選擇),就是引用?!纠? :void s & pl ,i nt &p2) /此處函數(shù)的形參 pl , p 2都是引用 in t p ; p=p1; p仁p2 ;p2= p; 為在程序中調(diào)用該函數(shù) ,則相應(yīng)的主調(diào)函數(shù)的調(diào)用點(diǎn)處 ,直接以變量作為實(shí)參進(jìn)行調(diào)用即 可, 而不需要實(shí)參變量有任何的特殊要求。如:對(duì)應(yīng)上面定義的swap 函數(shù),相應(yīng)的主調(diào)函數(shù)可寫為 :main( )i n t a , b ;ci n >>a> > b;輸入a,b兩變量的值s) ; /直接以變量a和 b作為實(shí)參調(diào)用s w
5、 a p函數(shù)cou t <<a<< /'< v b; /輸出結(jié)果上述程序運(yùn)行時(shí),如果輸入數(shù)據(jù)10 20并回車后,則輸出結(jié)果為2 0 10。由【例 2】可看出 :(1)傳遞引用給函數(shù)與傳遞指針的效果是一樣的。這時(shí),被調(diào)函數(shù)的形參就成為原來主調(diào)函數(shù)中的實(shí)參變量或?qū)ο蟮囊粋€(gè)別名來使用,所以在被調(diào)函數(shù)中對(duì)形參變量的操作就是對(duì)其相應(yīng)的目標(biāo)對(duì)象(在主調(diào)函數(shù)中)的操作。(2)使用引用傳遞函數(shù)的參數(shù),在內(nèi)存中并沒有產(chǎn)生實(shí)參的副本,它是直接對(duì)實(shí)參操作 而使用一般變量傳遞函數(shù)的參數(shù),當(dāng)發(fā)生函數(shù)調(diào)用時(shí),需要給 形參分配存儲(chǔ)單元 ,形參變量是實(shí)參變量的副本;如果傳遞的是對(duì)象,還將
6、調(diào)用拷貝構(gòu)造函數(shù)。因此,當(dāng)參數(shù)傳遞的數(shù)據(jù)較大時(shí) ,用引用比用一般變量傳遞參數(shù)的效 率和所占空間都好。( 3)使用指針作為函數(shù)的參數(shù)雖然也能達(dá)到與使用引用的效果,但是,在被調(diào)函數(shù)中 同樣要給形參分配存儲(chǔ)單元, 且需要重復(fù)使用 "指針變量名 "的 形式進(jìn)行運(yùn)算 ,這很容易產(chǎn) 生錯(cuò)誤且程序的閱讀性較差 ;另一方面,在主調(diào)函數(shù)的調(diào)用點(diǎn)處,必須用變量的地址作為實(shí)參。而引用更容易使用 ,更清晰。如果既要利用引用提高程序的效率, 又要保護(hù)傳遞給函數(shù)的數(shù)據(jù)不在函數(shù)中被改變 ,就應(yīng) 使用常引用。2、常引用常引用聲明方式:const類型標(biāo)識(shí)符&引用名=目標(biāo)變量名;用這種方式聲明的引用,
7、不能通過引用對(duì)目標(biāo)變量的值進(jìn)行修改,從而使引用的目標(biāo)成為c on s t,達(dá)到了引用的安全性?!纠?】:int a ;con st int &ra = a;?ra = 1; / 錯(cuò)誤a =1; / 正確這不光是讓代碼更健壯,也有些其它方面的需要。【例 4】:假設(shè)有如下函數(shù)聲明:s t ri ng f o o ();void ba r(string s );那么下面的表達(dá)式將是非法的ba r (fo o ( ) ;?ba r("hel 1 o wor 1 d");原因在于f o o()和"hel 1 o wo rld"串都會(huì)產(chǎn)生一個(gè)臨時(shí)對(duì)象,而在C
8、+ +中,這些臨時(shí)對(duì)象都是co n st類型的。因此上面的表達(dá)式就是試圖將一個(gè)co ns t類型的對(duì)象轉(zhuǎn)換為非c on s t類型,這是非法的。引用型參數(shù)應(yīng)該在能被定義為 co nst 的情況下,盡量定義為 const 。?3、引用作為返回值要以引用返回函數(shù)值 ,則函數(shù)定義時(shí)要按以下格式 :類型標(biāo)識(shí)符&函數(shù)名(形參列表及類型說明)? 函數(shù)體說明:(1)以引用返回函數(shù)值 ,定義函數(shù)時(shí)需要在函數(shù)名前加(2)用引用返回一個(gè)函數(shù)值的最大好處是,在內(nèi)存中不產(chǎn)生被返回值的副本?!纠?】以下程序中定義了一個(gè)普通的函數(shù)fn 1(它用返回值的方法返回函數(shù)值),另外一個(gè)函數(shù)f n2,它以引用的方法返回函數(shù)
9、值。#i n c 1 u de <iostream . h>f loat te mp;/定義全局變量 t em p?f 1 oat fn1(float r);聲明函數(shù) fn1 ?float &fn2(floa t r ); /聲明函數(shù)fn2?floa t fn 1( float r)定義函數(shù)fn 1,它以返回值的方法返回函數(shù)值 ? temp =(f1o at )(r*r*3 14);r e tu r n tem p ;?flo a t &f n 2 (f 1 oat r) /定義函數(shù)f n2 ,它以引用方式返回函數(shù)值?? temp = (float)(r衣 r *3
10、 .14);r etu r n t emp ; ?vo i d main()/主函數(shù)f 1 oat a =f n 1(10. 0 ); /第 1種情況,系統(tǒng)生成要返回值的副本(即臨時(shí)變量)f 1 o a t &b= f n 1 (1 0 . 0 ); /第2種情況,可能會(huì)出錯(cuò)(不同 C+ +系統(tǒng)有不同規(guī)定) /不能從被調(diào)函數(shù)中返回一個(gè)臨時(shí)變量或局部變量的引用float c = fn2(10.0); /第3種情況,系統(tǒng)不生成返回值的副本/可以從被調(diào)函數(shù)中返回一個(gè)全局變量的引用? float &d= fn2(10.0); / /第 4種情況,系統(tǒng)不生成返回值的副本/可以從被調(diào)函數(shù)中返回一個(gè)全局變量的引用? c out<<a v <c<<d ;引用作為返回值 ,必須遵守以下規(guī)則 :(1) 不能返回局部變量的引用。這條可以參照Effect iv e C+ 1的It e
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 創(chuàng)業(yè)合伙人簽訂合同范本
- 業(yè)務(wù)轉(zhuǎn)包合同范例
- 農(nóng)家樂入股合同范本
- 產(chǎn)品會(huì)展合同范本
- 不退不換合同范本
- 助聽器合同范本
- 勞務(wù)派遣合同范本6
- 借名辦證合同范本
- 倉庫租憑合同范本
- 勞動(dòng)合同范本廣州
- 樁基承載力自平衡法檢測(cè)方案資料
- 房地產(chǎn)市場(chǎng)報(bào)告 -2024年第四季度大連寫字樓和零售物業(yè)市場(chǎng)報(bào)告
- 2025云南昆明空港投資開發(fā)集團(tuán)招聘7人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 簡(jiǎn)單的路線圖(說課稿)2024-2025學(xué)年三年級(jí)上冊(cè)數(shù)學(xué)西師大版
- 成都市2024-2025學(xué)年度上期期末高一期末語文試卷(含答案)
- 2025年教育局財(cái)務(wù)工作計(jì)劃
- Unit 5 Now and Then-Lesson 3 First-Time Experiences 說課稿 2024-2025學(xué)年北師大版(2024)七年級(jí)英語下冊(cè)
- 《中國(guó)心力衰竭診斷和治療指南2024》解讀
- 2025中國(guó)人民保險(xiǎn)集團(tuán)校園招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- 中小學(xué)智慧校園建設(shè)方案
- 中國(guó)食物成分表2020年權(quán)威完整改進(jìn)版
評(píng)論
0/150
提交評(píng)論