數(shù)組與指針課件_第1頁(yè)
數(shù)組與指針課件_第2頁(yè)
數(shù)組與指針課件_第3頁(yè)
數(shù)組與指針課件_第4頁(yè)
數(shù)組與指針課件_第5頁(yè)
已閱讀5頁(yè),還剩58頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第5章 數(shù)組與指針 第1頁(yè),共63頁(yè)。本章學(xué)習(xí)要點(diǎn) 1. 掌握一維數(shù)組的定義、賦初值以及簡(jiǎn)單應(yīng)用;2. 掌握一維字符數(shù)組和字符串之間的關(guān)系,了解字符串的常用操作;3. 掌握二維數(shù)組的定義、賦初值,了解其應(yīng)用;4. 掌握指針的定義和運(yùn)算;5. 掌握指針與一維數(shù)組、字符串的關(guān)系;6. 掌握動(dòng)態(tài)內(nèi)存管理的方法;7.掌握別名引用和指針引用。第2頁(yè),共63頁(yè)。第5章 數(shù)組與指針5.1 一維數(shù)組5.2 二維數(shù)組5.3 指針5.4 動(dòng)態(tài)內(nèi)存管理5.5 引用第3頁(yè),共63頁(yè)。5.1 一維數(shù)組 5.1.1 一維數(shù)組的定義和初始化1. 定義 什么是數(shù)組?數(shù)組是按相鄰內(nèi)存單元存放的單種數(shù)據(jù)類型的一組元素。換句話說(shuō):

2、數(shù)組是一組元素的集合,這些元素具有相同的數(shù)據(jù)類型,并且這些元素在計(jì)算機(jī)內(nèi)存中是被存放在相鄰的內(nèi)存單元中的,這些元素不需要使用不同的變量名來(lái)定義,它們共享同一個(gè)名稱,并且通過(guò)它們?cè)跀?shù)組中的位置加以區(qū)分。我們把這個(gè)共享的名稱叫做數(shù)組名,而把每個(gè)元素在數(shù)組中的位置用下標(biāo)進(jìn)行表示,下標(biāo)一般從 0開(kāi)始。 第4頁(yè),共63頁(yè)。在使用數(shù)組前必須進(jìn)行聲明,定義一維數(shù)組的格式如下: ; 例如:要定義一個(gè)整型數(shù)組用來(lái)存放全班30個(gè)學(xué)生的成績(jī)。 int cj30; 此數(shù)組包含30 個(gè)元素,這30個(gè)元素分別為:cj0、cj1、cj29,數(shù)據(jù)類型都為整型。 第5頁(yè),共63頁(yè)。2. 初始化 當(dāng)我們聲明了一個(gè)數(shù)組之后,相當(dāng)于

3、在內(nèi)存中開(kāi)辟了一串連續(xù)的內(nèi)存單元,接下來(lái)就要往這些內(nèi)存單元中存儲(chǔ)數(shù)據(jù),我們把這一過(guò)程稱之為賦值。如果是第一次進(jìn)行賦值,則稱之為初始化。 給數(shù)組賦值有下面幾種 方法:(1)可以給每個(gè)數(shù)組元素單獨(dú)賦值: cj0=50; /可以直接賦以一具體的數(shù)據(jù)cj1=cj0; /可以把其它數(shù)組元素的值賦值給該數(shù)組元素cj2=x; /可以把其它變量的值賦值給該數(shù)組元素cj3=cj0+cj2; /可以把表達(dá)式的值賦值給該數(shù)組元素 第6頁(yè),共63頁(yè)。(2)可以對(duì)整個(gè)數(shù)組賦值如:float money 3=12.5,34.6,5.8;或者float money 3; money 3=12.5,34.6,5.8; 注意:

4、 這種賦值方法在使用時(shí)必須確保中給出的數(shù)據(jù)個(gè)數(shù)必須要小于或者等于數(shù)組的實(shí)際大小,否則將會(huì)出現(xiàn)錯(cuò)誤。 第7頁(yè),共63頁(yè)。在初始化時(shí)需要注意:(1)對(duì)數(shù)組賦值時(shí),不能用一個(gè)數(shù)組對(duì)另外一個(gè)數(shù)組賦值。如:int merry3=mike3; (2)在聲明數(shù)組的時(shí)候需要說(shuō)明數(shù)組的大小,除非你在同一個(gè)語(yǔ)句中對(duì)它進(jìn)行初始化 。如:int merry =1,2,3; /說(shuō)明該數(shù)組有三個(gè)元素這種情況是錯(cuò)誤的:int merry ;第8頁(yè),共63頁(yè)。5.1.2 一維數(shù)組的應(yīng)用【例5.1】通過(guò)計(jì)算機(jī)接收某班級(jí)30個(gè)同學(xué)的語(yǔ)文成績(jī),并且按照從高到低輸出。#include class students float cj3

5、0; /定義一個(gè)cj數(shù)組,用于存儲(chǔ)成績(jī) public:void sortData( ) /接收數(shù)據(jù)并且排序for ( int m=0; m30; m + ) /接收30 個(gè)成績(jī)coutcjm; 第9頁(yè),共63頁(yè)。float temp; /排序for(int i=0;i29;i+) for(int j=i+1;j30;j+) if (cjicjj)temp = cji;cji = cjj;cjj = temp; 第10頁(yè),共63頁(yè)。void display( )for(int j = 0;j 30; +j)cout cjj endl;int main( )students C1;C1.sortD

6、ata( );C1.display( );第11頁(yè),共63頁(yè)。5.1.3一維字符數(shù)組與字符串1. 一維字符數(shù)組 如果數(shù)組存放的數(shù)據(jù)屬于文本,我們就將這樣的數(shù)組稱為字符數(shù)組。 (1)聲明 一維字符數(shù)組的聲明與一維整型數(shù)組的聲明類 似,只是將表示類型的關(guān)鍵字換成char,格式如下 char 數(shù)組名數(shù)組大小; 例如:char array10;代表在內(nèi)存中申請(qǐng)10個(gè)連續(xù)的存儲(chǔ)單元,這些存儲(chǔ)單元用來(lái)存放字符。 第12頁(yè),共63頁(yè)。(2)賦值如:定義一個(gè)字符數(shù)組,需要存儲(chǔ)的數(shù)據(jù)為:abcdchar name4;name0= a;name1= b;name2= c;name3= d; 也可以這樣寫: cha

7、r name4=a, b, c, d; 第13頁(yè),共63頁(yè)。2. 字符串 字符串是一個(gè)以NULL(“0”)結(jié)尾的字符數(shù)組,換句話講,如果數(shù)組以NULL結(jié)尾,那么該數(shù)組就稱為字符串,簡(jiǎn)稱為串。在實(shí)際顯示中,NULL是不可顯示字符,所以不在屏幕上顯示,它只表示串的結(jié)束。 字符串的聲明同字符數(shù)組,只是在賦值上有所區(qū)別。 如:存儲(chǔ)字符串mike char name5=”mike”; /字符串mike實(shí)際長(zhǎng)度為5 或 char name =”mike”;/計(jì)算機(jī)根據(jù)實(shí)際值計(jì)算出數(shù)組長(zhǎng)度 或 char name5;/先定義數(shù)組,在逐個(gè)賦值 name0= m; name1= i; name2= k; nam

8、e3= e; name4= 0; 第14頁(yè),共63頁(yè)。注意: 雙引號(hào)表示所括出來(lái)的數(shù)據(jù)是字符串,如果是單個(gè)的字符,應(yīng)該用單引號(hào),因此在上例中逐個(gè)賦值時(shí)為了表示所存儲(chǔ)的數(shù)據(jù)是字符串必須在最后存儲(chǔ)一個(gè)0,代表字符串的結(jié)束。如果最后沒(méi)有name4= 0;該語(yǔ)句只能說(shuō)明name數(shù)組是一個(gè)字符數(shù)組,它的長(zhǎng)度為5,已經(jīng)存儲(chǔ)了4個(gè)字符,最后一個(gè)元素還沒(méi)有賦值。 例如:要記錄學(xué)生的姓名,該如何定義數(shù)組?分析:由于學(xué)生的姓名是屬于字符串,所以要定義一個(gè)字符串?dāng)?shù)組,如果每個(gè)學(xué)生的姓名長(zhǎng)度在20個(gè)字符以內(nèi),則可以定義該數(shù)組的長(zhǎng)度為21。 char name21;第15頁(yè),共63頁(yè)。5.1.4字符串的主要操作1.字符

9、串的輸入和輸出 字符串的輸入和輸出與一般變量的輸入與輸出類似,用cin和cout實(shí)現(xiàn)。 【例5.2】某網(wǎng)站需要記錄來(lái)訪成員的信息并顯示它們,需要記錄的是姓名、城市、電話號(hào)碼。 #includeclass customer char name30; char city30;char phonenumber15; 第16頁(yè),共63頁(yè)。public:void acceptdata( )coutname; coutcity; coutphonenumber; /只需要直接給出串名 void displaydata( )cout”your name is:”nameendl;cout”your city

10、 is:”cityendl;cout”your telephonenumber is:”phonenumberendl; 第17頁(yè),共63頁(yè)。int main( ) customer s;cout”please enter these information:”endl;s.accpetdata( );s.displaydata( );return 0;第18頁(yè),共63頁(yè)。2. 字符串的常用函數(shù)(1)strlen() 求字符串的長(zhǎng)度該函數(shù)將返回字符串中實(shí)際存儲(chǔ)的字符個(gè)數(shù),0除外,假設(shè)一字符串為“miker”,串名為name,則語(yǔ)句 coutstrlen(name)endl;將得到結(jié)果5。(2)

11、strcpy ( ) 復(fù)制字符串要將一個(gè)字符串復(fù)制給另外一個(gè)字符串,不能采用以下這種方法:char amounts6=”hello”;char customer6; customer=amounts; /非法操作 第19頁(yè),共63頁(yè)。我們可以采用逐個(gè)賦值的方法:char amounts6=”hello”;char customer6;customer0=h;customer1=e;customer2=l;customer3=l;customer4=e;customer5=0;也可以用函數(shù)strcpy( )實(shí)現(xiàn):char amounts6=”hello”;char customer6; strc

12、py(customer, amounts); /*可以將amounts中的數(shù)據(jù)復(fù)制給 customer*/第20頁(yè),共63頁(yè)。(3)strcat()字符串的連接該函數(shù)是將一個(gè)字符串連接到另一個(gè)字符串的后面,得到一個(gè)新的字符串。如要將字符串customer連接到字符串a(chǎn)mounts的后面,可以采用下列語(yǔ)句:char amounts12=”hello”;char customer6=”world”;strcat(amounts, customer); /* amounts字符串為“helloworld” ,customer的值不變*/注意:要保證前一個(gè)字符串的空間足夠大,否則將得不到正確結(jié)果。(4

13、)strcmp() 比較字符串在實(shí)際操作中,我們經(jīng)常需要比較兩個(gè)字符串,比如要將幾個(gè)學(xué)生的姓名按照升序排列,這時(shí)不能用關(guān)系運(yùn)算符來(lái)比較。我們用函數(shù)strcmp( )第21頁(yè),共63頁(yè)?!纠?.3】會(huì)員購(gòu)物享受8折優(yōu)惠,否則全價(jià)購(gòu)買 #include#includeclass cust char shenfen8;float money;public:void just( )cout shenfen;coutmoney; 第22頁(yè),共63頁(yè)。if (strcmp(shenfen,huiyuan)=0) coutyour money is:money*0.8; else coutyour mone

14、y is:money;int main( ) cust lihua;lihua.just( );return 0;第23頁(yè),共63頁(yè)。5.2 二維數(shù)組 5.2.1 二維數(shù)組的定義和初始化1. 定義 一維數(shù)組在空間上,我們可以將它看作是一行或者一列,是一維的、線性的;而二維數(shù)組是包含多行多列的一個(gè)矩陣,是二維的。2. 聲明 聲明一個(gè)二維數(shù)組必須指出該數(shù)組包含的行數(shù)和列數(shù)。格式如下: 數(shù)組名行數(shù)列數(shù); 第24頁(yè),共63頁(yè)。假如定義一個(gè)包含2行3列的二維整型數(shù)組:int number23;該數(shù)組第一維大小是2,第二維大小是3,表示該數(shù)組聲明的內(nèi)存空間是一個(gè)2行3列的矩陣,這個(gè)數(shù)組包含的總元素個(gè)數(shù)是2

15、3=6,如圖5-1表示:圖5-1 2行3列的二維數(shù)組由于數(shù)組的下標(biāo)是從0開(kāi)始,所以該矩陣第一行為第0行,第一列為0列,number00表示的是第0行第0列的這個(gè)元素。 第25頁(yè),共63頁(yè)。3. 賦值 我們可以在聲明二維數(shù)組的同時(shí)給予初始化,當(dāng)然也可以在以后進(jìn)行初始化,但有一點(diǎn)需要注意,那就是二維數(shù)組同一維數(shù)組一樣,在聲明的同時(shí)需要說(shuō)明大小,除非你在同一個(gè)語(yǔ)句中對(duì)它進(jìn)行初始化,這時(shí)也須指定列數(shù)。 由于二維數(shù)組涉及多行多列,因此在對(duì)其進(jìn)行賦值時(shí)和一維數(shù)組有所不同。 第26頁(yè),共63頁(yè)?!纠?.4】定義一個(gè)3行2列的整型數(shù)組,并進(jìn)行賦值 int num32= 15,32,10,21,90,7 ; 在

16、這個(gè)例子中,中的數(shù)據(jù)位于同一行中,由于該數(shù)組有3行,所以每行數(shù)據(jù)都被括起來(lái),而所有的行都被包括在最外層的中。 也可以寫成:int num 2= 15,32,10,21,90,7 ; 這時(shí)省略了行數(shù),但列數(shù)不能省略。下面這種寫法就是錯(cuò)的:int num = 15,32,10,21,90,7 ; /錯(cuò)誤第27頁(yè),共63頁(yè)。5.2.2 二維數(shù)組的應(yīng)用 【例5.5】通過(guò)計(jì)算機(jī)接收某班級(jí)10個(gè)同學(xué)的姓名,并按照升序排列 #include#includeclass studentchar name1020;/定義一個(gè)二維數(shù)組,每行可存儲(chǔ)20個(gè)字符,共10行void accept( )int i;for(i

17、=0;i10;i+)cout”please enter the students name :”namei; /只需給出需要存儲(chǔ)的行數(shù) 第28頁(yè),共63頁(yè)。void px( ) /排序char stmp20;for(int i=0;i10;i+)for(int j=i;j0)strcpy(stmp,namei);strcpy(namei,namej);strcpy(namej,stmp); 第29頁(yè),共63頁(yè)。void display( )for(int i=0;i10;i+)coutnameiendl;int main( )student s;s.accept( );s.px( );s.di

18、splay( );return 0; 第30頁(yè),共63頁(yè)。5.3 指針 5.3.1指針的定義與初始化 1. 定義 什么是指針?舉例來(lái)講,如果將計(jì)算機(jī)的各個(gè)內(nèi)存單元比作是一個(gè)一個(gè)的小抽屜的話,那么指針就是開(kāi)啟這些小抽屜的鑰匙,換句話講,指針就是一個(gè)指示器,它告訴程序可以在在哪塊內(nèi)存中找到數(shù)據(jù)。實(shí)際上,指針也是一個(gè)變量,指針中存放的是所指向的那塊內(nèi)存單元的地址。 指針的定義方法如下: 指針類型 *指針名; 第31頁(yè),共63頁(yè)。如:int *pname; 這個(gè)聲明語(yǔ)句起到的作用是:定義一個(gè)指針,該指針的名字為pname,它指向一個(gè)存放整型數(shù)據(jù)的存儲(chǔ)地址。需要注意的是*并不是指針名的一部分,它的作用在

19、于說(shuō)明所定義的是一個(gè)指針變量,與我們前面所講的基本數(shù)據(jù)類型變量的定義相區(qū)別。又如:char *psize; float *ptr; 分別表示定義一個(gè)字符型指針變量和單精度指針變量。 第32頁(yè),共63頁(yè)。2. 初始化 對(duì)指針進(jìn)行初始化其實(shí)就是將某塊內(nèi)存單元的地址賦值給它,但是怎么能夠知道內(nèi)存單元的地址呢?&這個(gè)符號(hào)能夠幫助我們?nèi)〉米兞康牡刂?。如:int tr; int *ptr=&tr;也可以這樣寫: int tr; *ptr; ptr=&tr; 該語(yǔ)句定義了一個(gè)指針ptr,它指向一個(gè)整型變量,該整型變量為tr。在指針變量ptr中存放的是變量tr的地址。而*ptr指向的就是變量tr中的內(nèi)容。下圖

20、5-2清晰的表明了指針的作用: 第33頁(yè),共63頁(yè)?!纠?.6】下列程序輸出結(jié)果是什么? #include void main( ) int nNumber; int *p; nNumber =20; p = &nNumber; coutnNumber = nNumberendl; coutnNumber = *pendl; coutnNumber address= pendl; *p = 30; coutnNumber= nNumberendl; 第34頁(yè),共63頁(yè)。程序運(yùn)行結(jié)果為:nNumber =20nNumber =20nNumber address=0 x8fd5fff4nNumbe

21、r =30 第35頁(yè),共63頁(yè)。5.3.2指針的類型 指針是一個(gè)變量,因此指針也有相關(guān)的類型。但是和普通變量不同的是,不同數(shù)據(jù)類型的指針之間的區(qū)別不是在指針的表示上,也不在指針?biāo)钟械闹瞪?,指針的類型指的是指針?biāo)赶虻臄?shù)據(jù)的類型,所以指針的類型必須和所指向的變量的類型相匹配。 第36頁(yè),共63頁(yè)。5.3.3指針運(yùn)算指針也可以進(jìn)行加減運(yùn)算,但是和普通的整數(shù)加減運(yùn)算并不相同。它允許以下這些運(yùn)算:1. 賦值運(yùn)算 我們可以將一個(gè)變量的地址賦值給指針,如: int tr1; int *ptr=&tr1;/注意指針的類型在此處應(yīng)該為整型 指針之間也可以進(jìn)行相互賦值,如: int tr1; int *ptr

22、1,*ptr2; ptr1=&tr1; ptr2=ptr1;第37頁(yè),共63頁(yè)。2. 算術(shù)運(yùn)算 由于指針存儲(chǔ)的是內(nèi)存地址,所以指針的算術(shù)運(yùn)算針對(duì)的都是整數(shù)。最常見(jiàn)的算術(shù)運(yùn)算是加減運(yùn)算,可以對(duì)指針加1或者減1。由于指針是一個(gè)指示器,所以指針的加減運(yùn)算并不僅僅是整數(shù)的加減,而在于指針?biāo)鎯?chǔ)的內(nèi)存地址變動(dòng)后,指針?biāo)赶虻膬?nèi)存單元也產(chǎn)生變化。如:int tr1;int *ptr=&tr1;ptr+;第38頁(yè),共63頁(yè)。圖5-3 程序運(yùn)行結(jié)束后,指針變量ptr指向的并不是變量tr1,而是在tr1之后、與之相鄰的另外一個(gè)內(nèi)存單元。如圖5-3所示:3. 關(guān)系運(yùn)算 指針之間可以進(jìn)行比較,如果兩個(gè)指針比較結(jié)果相

23、同,說(shuō)明它們指向的是同一個(gè)變量。 第39頁(yè),共63頁(yè)。5.3.4指針和一維數(shù)組的關(guān)系 指針經(jīng)常與一維數(shù)組配合使用,這樣能夠非常方便的對(duì)數(shù)組進(jìn)行操作。int num3=10,20,30;int *p; p=&num0; /*通過(guò)把第一個(gè)數(shù)組元素的地址賦值 給指針變量將指針指向數(shù)組的開(kāi)頭*/如圖5-4所示: 圖5-4 第40頁(yè),共63頁(yè)。執(zhí)行以下程序段:int num3=10,20,30;int *p;p=&num0;p+;(*p)+;cout*p;結(jié)果如圖5-5圖5-5 第41頁(yè),共63頁(yè)。 p+的作用是使指針指向下一個(gè)元素,(*p)+的作用是使指針?biāo)赶虻哪莻€(gè)元素自增1。如果將(*p)+的括號(hào)

24、去掉,程序的最后輸出結(jié)果將會(huì)怎么樣呢?int num3=10,20,30;int *p;p=&num0;p+;*p+;cout*p; 結(jié)果如圖5-6所示: 圖5-6 第42頁(yè),共63頁(yè)?!纠?.7】用戶輸入10個(gè)數(shù)據(jù),按照從小到大的順序輸出 #include void main( ) int num10,temp;int *p; p=&num0; cout請(qǐng)輸入10個(gè)數(shù)據(jù):; for(int i=0;i*(p+i);coutendl;for(i=0;i10;i+)第43頁(yè),共63頁(yè)。for(int j=i+1;j*(p+j)temp=*(p+i);/交換*(p+i)=*(p+j);*(p+j)

25、=temp; cout排列后為:endl;for( i=0;i10;i+)cout*(p+i) ;第44頁(yè),共63頁(yè)。5.3.5指針和字符串的關(guān)系 使用指針操作字符串非常的方便。有如下語(yǔ)句:char *p=”BeiJing”; 指針p指向字符串BeiJing,那么如果要將該字符串輸出怎么操作? 語(yǔ)句 cout*pendl;能夠?qū)崿F(xiàn)嗎?答案是否定的,該語(yǔ)句運(yùn)行后得到結(jié)果是:B。 語(yǔ)句char *p=”BeiJing”;的作用是使指針p指向字符串,而我們已經(jīng)知道字符串其實(shí)是一個(gè)以0結(jié)尾的字符數(shù)組,所以指針p就是指向字符串的第一個(gè)元素,而通過(guò)cout*pendl;輸出的就是字符串的第一個(gè)元素B。那要

26、輸出整個(gè)字符串怎么辦呢?第45頁(yè),共63頁(yè)。 我們可以使用語(yǔ)句:coutpendl; 由于在程序中使用字符串的時(shí)候,字符串會(huì)占有一個(gè)連續(xù)的空間,所以只要給出指針名即可將該指針?biāo)赶虻恼麄€(gè)字符串輸出。 如果有人問(wèn)如果要輸出存儲(chǔ)該字符串的內(nèi)存的地址,該如何做呢?下列程序可以實(shí)現(xiàn):char *p=”BeiJing”;void *n;n=p;coutn; 我們可以定義一個(gè)通用指針(void指針),該指針可以指向任何類型的數(shù)據(jù),通過(guò)n=p;可將字符串的地址賦值給void指針n. 第46頁(yè),共63頁(yè)?!纠?.8】閱讀下列程序 #include int main( ) char *ptr = “welcom

27、e”; void *p;p = ptr; cout ptr p endl; ptr = ByeBye; p = ptr; cout ptr p endl; return 0; 第47頁(yè),共63頁(yè)。程序執(zhí)行結(jié)果:welcome0 x8fd100aaByeBye0 x8fd100b2注意:如果使用字符串?dāng)?shù)組,不能出現(xiàn)下列情況char city20=”paries”;city=”BeiJing”; /錯(cuò)誤 第48頁(yè),共63頁(yè)。5.4 動(dòng)態(tài)內(nèi)存管理 我們都知道在使用數(shù)組之前必須首先定義數(shù)組,定義數(shù)組實(shí)際上就意味著在計(jì)算機(jī)內(nèi)存中開(kāi)辟一定的空間以便以后使用。但是實(shí)際上在很多時(shí)候一開(kāi)始我們并不太清楚要定義的

28、數(shù)組元素的個(gè)數(shù),這使得我們?cè)诙x數(shù)組的時(shí)候產(chǎn)生了困惑,如果在定義數(shù)組的時(shí)候預(yù)留最大的長(zhǎng)度,這有可能會(huì)導(dǎo)致內(nèi)存的浪費(fèi),該怎么辦呢?動(dòng)態(tài)管理內(nèi)存能夠很好地解決這一問(wèn)題。 所謂動(dòng)態(tài)內(nèi)存管理,其實(shí)就是在需要的時(shí)候申請(qǐng)內(nèi)存,而在不需要的時(shí)候釋放內(nèi)存,這使得計(jì)算機(jī)的內(nèi)存不會(huì)被浪費(fèi),提高使用效率。 第49頁(yè),共63頁(yè)。1. 動(dòng)態(tài)分配內(nèi)存 使用new運(yùn)算符能夠在需要的時(shí)候申請(qǐng)內(nèi)存。new運(yùn)算符的語(yǔ)法是:=new ;說(shuō)明: (1)類型可以是整型、字符型或者是浮點(diǎn)型等。 (2)左邊的指針變量的類型應(yīng)該與右邊的變量類型匹配。例如:int *ptr1;ptr1=new int; /動(dòng)態(tài)分配一塊內(nèi)存,并使指針ptr指向

29、它float *ptr2; ptr2=new float10; /動(dòng)態(tài)分配一個(gè)有10個(gè)元素的數(shù)組,并使指針指向它 第50頁(yè),共63頁(yè)。2. 內(nèi)存的釋放 內(nèi)存使用完畢,為了節(jié)約資源需要將其釋放??梢允褂胐elete運(yùn)算符將其釋放。delete運(yùn)算符的語(yǔ)法是: delete ; 例如:delete ptr1; /釋放由ptr1指向的內(nèi)存delete ptr2; /釋放由ptr2指向的一個(gè)數(shù)組 這樣一來(lái),程序僅在執(zhí)行到new運(yùn)算符的時(shí)候分配內(nèi)存,在執(zhí)行到delete運(yùn)算符的時(shí)候釋放內(nèi)存,大大的節(jié)約了計(jì)算機(jī)內(nèi)存資源。 第51頁(yè),共63頁(yè)。3. 動(dòng)態(tài)內(nèi)存管理的應(yīng)用【例5.9】由用戶決定需要輸入的數(shù)據(jù)個(gè)數(shù)

30、,在輸入這些數(shù)據(jù)后輸出這些數(shù)據(jù)的平均值。#include void main( ) int *p,n,sum=0;float avg;cout您要輸入幾個(gè)數(shù)據(jù)?n;cout請(qǐng)輸入n個(gè)數(shù)據(jù):;p=new intn; /動(dòng)態(tài)分配內(nèi)存for(int i=0;i*(p+i); coutendl; 第52頁(yè),共63頁(yè)。for(i=0;in;i+,p+)sum=sum+*p;avg=sum/n;cout這些數(shù)據(jù)的平均值為:avgendl;delete p; /釋放內(nèi)存 第53頁(yè),共63頁(yè)。5.5 引用5.5.1引用的定義和初始化 1. 定義 什么是引用?引用就是引入了對(duì)象的一個(gè)同義詞,相當(dāng)于給對(duì)象取個(gè)別名

31、,通過(guò)使用別名來(lái)引用該對(duì)象進(jìn)行操作。就像古人有字、號(hào)一樣。使用別名的引用的定義方法是: &別名=變量名; 例如: int &anum=num; 其中anum是num的別名,或者說(shuō)是對(duì)num的引用,這兩個(gè)名稱指的是同一個(gè)變量。第54頁(yè),共63頁(yè)。說(shuō)明:(1)引用別名產(chǎn)生的操作和直接通過(guò)對(duì)象產(chǎn)生的操作是完全一樣的。(2)一個(gè)變量可以有多個(gè)別名,每個(gè)別名產(chǎn)生的操作會(huì)影響其他所有的別名。 (3)一個(gè)別名被定義后除非再次定義,否則將永遠(yuǎn)指向該變量。 第55頁(yè),共63頁(yè)。2. 初始化 引用必須在定義的同時(shí)進(jìn)行初始化。下面的操作是非法的:int &anum;int num=10;anum=num; /非法應(yīng)

32、該改為:int num=10;int &anum=num; 第56頁(yè),共63頁(yè)?!纠?.10】閱讀程序 #includevoid swap(int &,int &);/定義一個(gè)帶參數(shù)的函數(shù)swap,使用別名引用class funint number1,number2;public:void get( );void fun:get( ) cinnumber1;cinnumber2;swap(number1,number2);coutnumber1 number2endl; 第57頁(yè),共63頁(yè)。void swap(int &num1,int &num2) int temp;temp=num1;num1=num2;num2=temp;coutnum1 num2endl;int main( ) fun f;f.get( ); 執(zhí)行程序,輸入: 10 20輸出結(jié)果為: 20 10 20 10第58頁(yè),共63頁(yè)。5.5.2指針和引用 我們能夠使用指針來(lái)實(shí)現(xiàn)引用,指針和引用在功能上比較相似,但是兩者并不完全相同,引用是引用了某個(gè)變量的別名,這樣一來(lái),可以使不同的變量名共享同一個(gè)內(nèi)存空間,或者可以說(shuō)引用只是引用了某塊內(nèi)存的別名,引用本身不占內(nèi)存;而指針是指向某塊內(nèi)存

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論