c++程序設(shè)計(jì)指針和引用_第1頁
已閱讀1頁,還剩59頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、C程序設(shè)計(jì)程序設(shè)計(jì)第8章指針和引用指針和引用在程序運(yùn)行時(shí)變量和函數(shù)都存放在內(nèi)存中,通過變量名來訪問數(shù)據(jù)、通過函數(shù)名來調(diào)用函數(shù)都是直接訪問方式。還有另一種間接訪問方式就是用指針。指針的本質(zhì)是內(nèi)存地址。指針往往用于說明函數(shù)的形參,使實(shí)參能通過指針傳遞,以提高函數(shù)調(diào)用的效率。利用指針能動態(tài)地使用內(nèi)存,以提高內(nèi)存使用效率。指針也能用來表示數(shù)據(jù)關(guān)聯(lián),以構(gòu)成復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。指針是C程序中最常見的類型。引用是C擴(kuò)展的新概念,主要用于函數(shù)形參和返回類型

2、。本章將詳細(xì)介紹指針和引用的概念及應(yīng)用。8.1指針及指針變量指針(pointer)的本質(zhì)是內(nèi)存地址。指針變量就是專門存儲地址的一種變量。通過指針變量所存儲的地址來訪問數(shù)據(jù)是一種間接尋址方式。由于處理器的機(jī)器語言能支持間接尋址,所以使用指針可以達(dá)到較高的計(jì)算性能。8.1.1地址的概念C編譯器對不同對象或變量按其數(shù)據(jù)類型分配合適大小的存儲空間。例如為或bool型變量分配1個(gè)字節(jié)(bytes)的存儲空間,sht分配2字節(jié),int和float分

3、配4個(gè)字節(jié),為double型變量分配8個(gè)字節(jié)的存儲空間。當(dāng)程序執(zhí)行時(shí),代碼和變量都加載到內(nèi)存中。計(jì)算機(jī)內(nèi)存被分成若干個(gè)存儲單元,存儲單元以字節(jié)為單位。每個(gè)存儲單元都有一個(gè)固定的編號,這個(gè)編號就是內(nèi)存地址。盡管一個(gè)變量可能占用多個(gè)字節(jié)空間,但都通過第一個(gè)字節(jié)的地址來訪問。存放某個(gè)變量的第一個(gè)字節(jié)的地址就是該數(shù)據(jù)的首地址。指針即內(nèi)存單元的地址,而數(shù)據(jù)是內(nèi)存單元中的內(nèi)容(或值)。假設(shè)在程序中說明了1個(gè)int型的變量a,其值為68。系統(tǒng)為變量a

4、分配4字節(jié)的存儲空間,設(shè)首地址為0X0065FDF4。通過地址0X0065FDF4就能找到變量a在內(nèi)存中的存儲單元,從而對變量a進(jìn)行訪問。0X0065FDF4就是變量a的指針。知道一個(gè)變量的地址和變量的類型就能對變量進(jìn)行訪問,就如同知道房間號就能找到房間,從而找到房間里的主人。指針是一種特殊的數(shù)據(jù)類型。所有類型的變量,無論是基本類型、用戶定義類型、還是這些類型的數(shù)組,在一次運(yùn)行時(shí)都有確定的地址,因此它們都有指針。對于32位計(jì)算機(jī),地址長

5、度就是32位,因此一個(gè)指針需要4個(gè)字節(jié),與整型int、浮點(diǎn)型float具有相同大小的長度。一個(gè)指針不僅有值,而且還要確定其類型,表示它能指向什么類型的數(shù)因?yàn)榘醋謱R(32位數(shù)據(jù))能提高CPU訪問內(nèi)存的效率,而且一次壓棧和出棧操作也是以32位數(shù)據(jù)為單位,代價(jià)是浪費(fèi)一些內(nèi)存。如果這些變量改為全局變量,它們將按實(shí)際大小存儲。如果一個(gè)指針變量存放的是某個(gè)對象或值的地址,就說這個(gè)指針變量指向該對象或值。在C程序設(shè)計(jì)中,指針變量只有確定了指向才有意

6、義。8.1.2指針變量指針變量就是專門存放地址的一種特殊變量。指針變量中存放的是地址值。一個(gè)指針的值就是一個(gè)地址。指針變量與其它變量一樣,在使用之前必須先說明。說明指針變量的格式為:[=其中,是這個(gè)指針變量所指向的對象的類型,簡稱指針類型,它可以是任何一種類型。表示這個(gè)變量是一個(gè)指針變量。這個(gè)變量的類型就是“”。是一個(gè)標(biāo)識符。指針變量可以進(jìn)行初始化,等號之后給出一個(gè)變量的地址,要求這個(gè)變量的類型與指針類型相符。假設(shè)程序中說明了一個(gè)變量i

7、nti=4,而且在運(yùn)行時(shí)該變量i的地址為0X0012FF70。說明一個(gè)指針變量:intpa=此時(shí)指針變量pa中就存放了變量i的地址,即pa中存放的值為0X0012FF70。我們稱pa指針指向了變量i。如圖8.2所示?,F(xiàn)在訪問變量i就有兩種方式:一是按變量名i來訪問。將變量名i轉(zhuǎn)換為一個(gè)相對地址,在運(yùn)行時(shí)經(jīng)動態(tài)定位得到i的地址0X0012FF70,再找到i的存儲單元。二是通過指針變量pa來訪問。按pa變量的地址先找到pa,然后根據(jù)pa的值

8、再找到變量i的存儲單元,從而對變量i進(jìn)行訪問。前一種訪問方式稱為直接尋址,后一種稱為間接尋址。間接方式的好處是一個(gè)指針pa在不同時(shí)刻可指向不同的整數(shù)變量,這樣通過一個(gè)指針變量就能訪問多個(gè)數(shù)據(jù)。例如:intip1i2說明一個(gè)指針變量ip1(其類型為int)和一個(gè)int變量i2floatfp說明一個(gè)指針變量fp(其類型為float)指針變量ip1所指向的變量的類型為int型,指針變量fp所指向的變量的類型為float型。下面說明指針變量的幾

9、種寫法都是合法的。intp與類型名之間有空格,與變量名p之間沒有空格intp1與類型名之間沒有空格,與變量名p1之間有空格intp2與類型名和變量名p2之間都沒有空格intp3與類型名和變量名p3之間都有空格在說明一個(gè)指針變量后,無論該指針變量指向何種類型的對象,系統(tǒng)都為其分配4個(gè)字節(jié)大小的存儲空間,因?yàn)橹羔樧兞看娣艃?nèi)存單元的地址,在32位計(jì)算機(jī)中內(nèi)存地址的取值范圍是相同的,都是4個(gè)字節(jié)。在一個(gè)變量說明語句中,或者一個(gè)函數(shù)形參表中,一個(gè)

溫馨提示

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

評論

0/150

提交評論