第9章 引用.ppt_第1頁
第9章 引用.ppt_第2頁
第9章 引用.ppt_第3頁
第9章 引用.ppt_第4頁
第9章 引用.ppt_第5頁
已閱讀5頁,還剩26頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第9章引用,徐素錦,2,本章主要內容,9.1引用的概念9.2引用的操作9.3什么能被引用9.4用引用傳遞函數(shù)參數(shù)9.5返回多個值9.6用引用返回值9.7函數(shù)調用作為左值9.8用const限定引用9.9返回堆中變量的引用作業(yè),3,學習目標,理解引用的概念;掌握引用的用法;理解使用引用傳遞函數(shù)參數(shù)的目的和方法;理解指針和引用的區(qū)別。,4,9.1引用的概念,引用是C+引入的新特性,是C+常用的一個重要內容,也是一個與內存空間密切相關的特殊數(shù)據(jù)類型。為了能像變量那樣使用變量名來引用一個已分配的內存空間,C+允許用戶在程序中聲明一個標識符使其具有這樣的性質,這個標識符就是引用。引用:給某一變量(或對象)

2、起一個“別名”,對引用的操作與對變量直接操作完全一樣。,5,9.1引用的概念,聲明和初始化引用的一般格式:引用的數(shù)據(jù)類型必須和被引用的內存空間的數(shù)據(jù)類型一致。inta;int,r1和r2都是變量a的內存空間的標識,以后就可在程序中使用r1和r2標識符直接對其所引用的內存空間進行操作。,注意:引用不是值,不占存儲空間,因而從概念上講,引用只有聲明,沒有定義。,6,9.1引用的概念,/Ch9_1.cpp#includeintmain()intintOne;int,運行結果:intOne:5rInt:5intOne:7rInt:7,7,9.2引用的操作,使用引用的操作使用一個對象的引用,如同使用其“

3、真名”例:#includeintmain()intx=100;int,執(zhí)行結果:1001000 x0013FF7C0 x0013FF7C9999990 x0013FF740 x0013FF74,/ch9_3.cpp引用的操作#includeintmain()intintOne;int,/等價于intOne=intTwo;,執(zhí)行結果:intOne:5rInt:5;int,inta10;int/,inta;int/,14,9.4用引用傳遞函數(shù)參數(shù),1.引用傳遞參數(shù)即:用引用作函數(shù)的參數(shù)/ch9_4.cpp#includevoidswap(int,運行結果為:beforeswap,x:5,y:6af

4、terswap,x:6,y:5,15,9.4用引用傳遞函數(shù)參數(shù),優(yōu)點:起到指針的作用,并不建立參數(shù)的拷貝,并且用法比指針更加簡單。,圖9-4傳遞引用的內存布局,16,2.引用存在的問題引用隱藏了函數(shù)所使用的參數(shù)傳遞的類型,所以無法從所看到的函數(shù)調用判斷其是值傳遞還是引用傳遞。例如,下面的代碼中兩個重載函數(shù)將引起編譯錯誤。voidfn(ints)/voidfn(int/error無法確知匹配哪一個函數(shù),Page16,9.4用引用傳遞函數(shù)參數(shù),17,9.5返回多個值,如果程序需要從函數(shù)“帶回”多個值怎么辦?由于return只能返回一個值,可以通過參數(shù)帶回多個值;指針作為函數(shù)參數(shù)可以帶回多個值;由于

5、引用是“別名”,引用作為函數(shù)形參,實參與形參之間不是值傳遞,而是一種“映射”,所以對形參的改變,實際上就是對實參的改變。,/ch9_5.cpp計算n的平方,立方,并返回狀態(tài)信息#includeintFactor(int,int,19,9.6用引用返回值,函數(shù)返回值時,要生成一個值的副本,而用引用返回值時,不生成值的副本。例如,下面的程序是有關引用返回的四種形式。/ch9_6.cpp#includefloattemp;/全局變量floatfn1(floatr)temp=r*r*3.14;returntemp;float,intmain()floata=fn1(5.0);/1float,運行結果為

6、:78.578.578.578.5,21,9.6用引用返回值,第一種情況:floata=fn1(5.0);,圖9-5返回值方式的內存布局,22,9.6用引用返回值,第二種情況:float,圖9-6返回值初始引用的情形,23,9.6用引用返回值,第三種情況:floatc=fn2(5.0);,圖9-7返回引用方式,24,9.6用引用返回值,第四種情況:float,圖9-8返回引用方式的值作為引用的初始值,25,9.6用引用返回值,說明:函數(shù)返回一個引用該函數(shù)中return后面必須是一個已分配的內存空間的標識,不能是表達式。函數(shù)不能返回一個局部變量的內存空間的引用。函數(shù)可以返回全局變量,靜態(tài)變量,和

7、堆中變量的引用。,26,9.7函數(shù)調用作為左值,當返回一個引用時,使得一個函數(shù)調用表達式成為左值表達式。#includeint/返回:aindex,27,9.7函數(shù)調用作為左值,intmain()inta=1,3,5,7,9;couta2endl;cout(fn(2,a)=55)endl;couta2endl;說明:函數(shù)fn()的返回值是一個引用,即引用到變量r上;而r是aindex的引用,所以實際上函數(shù)的返回值“引用”到變量aindex上。所以,函數(shù)調用fn()可以作為左值表達式。,執(zhí)行結果:55555,28,9.8用const限定引用,問題的提出:調用函數(shù)時,要建立實參的副本(把實參拷貝給形參),如果被傳遞的數(shù)據(jù)類型很大,開銷也很大,不可取。如果采用指針或引用的形式,則可以不建立副本,但是會產(chǎn)生實參被修改的危險(如果不希望實參被修改的話)。所以,如果調用函數(shù)時不建立副本以提高運行效率,又不希望有實參被改動的危險,則采用傳遞const指針或const引用(即:實參是地址或引用,形參定義成const型的指針或引用)的方法。,/ch9_10.cpp用const限定引用#includedouble,運行結果為:fnbeingcalledthevalueis:345.6377.6

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論