第5章構(gòu)造數(shù)據(jù)類(lèi)型2_第1頁(yè)
第5章構(gòu)造數(shù)據(jù)類(lèi)型2_第2頁(yè)
第5章構(gòu)造數(shù)據(jù)類(lèi)型2_第3頁(yè)
第5章構(gòu)造數(shù)據(jù)類(lèi)型2_第4頁(yè)
第5章構(gòu)造數(shù)據(jù)類(lèi)型2_第5頁(yè)
已閱讀5頁(yè),還剩93頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、c+語(yǔ)語(yǔ)言言程程序序設(shè)設(shè)計(jì)計(jì)教教程程第第11章章c+輸輸入入輸輸出出流流第第5 5章章 構(gòu)造數(shù)據(jù)類(lèi)型構(gòu)造數(shù)據(jù)類(lèi)型主講:尚明生 電子科技大學(xué)計(jì)算機(jī)學(xué)院 第第5 5章章構(gòu)造數(shù)據(jù)類(lèi)型構(gòu)造數(shù)據(jù)類(lèi)型1. 掌握枚舉類(lèi)型的使用;2. 深入理解數(shù)組的概念, 掌握數(shù)組應(yīng)用的一般方法;3. 深入理解指針的概念,掌握指針的使用;4. 注意指針與數(shù)組的區(qū)別,掌握多重指針以及指針與 數(shù)組的混合使用,合理應(yīng)用動(dòng)態(tài)數(shù)組;5. 理解字符串的概念,能夠靈活使用字符串;6. 理解引用的概念,掌握引用型函數(shù)參數(shù)的用法;7. 掌握結(jié)構(gòu)與聯(lián)合類(lèi)型的使用,并注意二者的區(qū)別。學(xué)習(xí)目標(biāo)c+語(yǔ)語(yǔ)言言程程序序設(shè)設(shè)計(jì)計(jì)教教程程 第第5章章構(gòu)構(gòu)造造

2、數(shù)數(shù)據(jù)據(jù)類(lèi)類(lèi)型型5.1 枚舉類(lèi)型枚舉類(lèi)型 1. 枚舉類(lèi)型的定義:枚舉類(lèi)型的定義: “枚舉枚舉”是指將變量所有可能的取值一一列舉出來(lái),變量的取值只限于列舉出來(lái)的常量。 枚舉類(lèi)型的聲明的一般形式如下 : 枚舉類(lèi)型名以及枚舉常量為標(biāo)識(shí)符,遵循標(biāo)識(shí)符的取名規(guī)則。 在定義一個(gè)枚舉類(lèi)型時(shí),定義了多個(gè)常量,供枚舉類(lèi)型變量取值,稱(chēng)此常量為枚舉常量枚舉常量。當(dāng)沒(méi)給各枚舉常量指定值時(shí),其值依次默認(rèn)為0、1、2、;在定義枚舉類(lèi)型時(shí),也可使用賦值另行指定枚舉常量的值。 enum 枚舉類(lèi)型名 枚舉常量1, 枚舉常量2, 枚舉常量n;枚舉!枚舉!c+語(yǔ)語(yǔ)言言程程序序設(shè)設(shè)計(jì)計(jì)教教程程 第第5章章構(gòu)構(gòu)造造數(shù)數(shù)據(jù)據(jù)類(lèi)類(lèi)型型5.

3、1 枚舉類(lèi)型枚舉類(lèi)型枚舉類(lèi)型的定義:枚舉類(lèi)型的定義:例1: enum weekday sun, mon, tue, wed, thu, fri, sat ; 定義了7個(gè)枚舉常量以及枚舉類(lèi)型weekday。枚舉常量具有默認(rèn)的整數(shù)與之對(duì)應(yīng):sun的值為0、mon的值為1、tue為2、sat為6。例2: enum city beijing,shanghai,tianjin=5,chongqing; 枚舉常量beijing的值為0,shanghai的值為1,tianjin的值指定為5。對(duì)于指定值后面的沒(méi)有指定值的枚舉常量,編譯器會(huì)將前一個(gè)常量值加1(下一個(gè)整數(shù))賦給它,所以chongqing的值為6。

4、c+語(yǔ)語(yǔ)言言程程序序設(shè)設(shè)計(jì)計(jì)教教程程 第第5章章構(gòu)構(gòu)造造數(shù)數(shù)據(jù)據(jù)類(lèi)類(lèi)型型5.1 枚舉類(lèi)型枚舉類(lèi)型枚舉類(lèi)型的定義說(shuō)明枚舉類(lèi)型的定義說(shuō)明: : 枚舉類(lèi)型定義了以后就可以使用枚舉常量、使用用枚舉類(lèi)型來(lái)定義變量,定義枚舉變量的方法與定義其它變量的方法一樣。 例如: enum city city1, city2; city city1, city2; 用兩種不同方法定義了city1、city2兩個(gè)枚舉類(lèi)型的變量名。 枚舉類(lèi)型變量也可以在定義枚舉類(lèi)型的同時(shí)定義 例如: enum city beijing,shanghai,tianjin=5,chongqing city1, city2; 在定義枚舉類(lèi)型的

5、同時(shí)定義枚舉類(lèi)型變量可以省略枚舉類(lèi)型名 例如: enum beijing,shanghai,tianjin=5,chongqing city1, city2; 在定義變量時(shí),可以順便給出初值,若不給初值,默認(rèn)初值為隨機(jī)的無(wú)意義的數(shù)。 c+語(yǔ)語(yǔ)言言程程序序設(shè)設(shè)計(jì)計(jì)教教程程 第第5章章構(gòu)構(gòu)造造數(shù)數(shù)據(jù)據(jù)類(lèi)類(lèi)型型5.1 枚舉類(lèi)型枚舉類(lèi)型枚舉類(lèi)型的使用:枚舉類(lèi)型的使用:用枚舉類(lèi)型建立枚舉變量后就可以對(duì)枚舉變量實(shí)施賦值以及進(jìn)行其它運(yùn)算了,對(duì)枚舉變量進(jìn)行賦值,其值要求為同一枚舉類(lèi)型要求為同一枚舉類(lèi)型。否則,在編譯時(shí)出錯(cuò)。 例如: weekday d1,d2,d3,d4; d1=sun; d2=6; /錯(cuò)誤

6、d3=shanghai; /錯(cuò)誤 其中對(duì)d2所賦之值是整數(shù)6,不是枚舉常量;可以采用將一個(gè)整型值強(qiáng)制轉(zhuǎn)換成同類(lèi)型的枚舉常量賦給枚舉變量。枚舉常量、枚舉類(lèi)型的變量可進(jìn)行算術(shù)運(yùn)算、關(guān)系運(yùn)算可進(jìn)行算術(shù)運(yùn)算、關(guān)系運(yùn)算。 對(duì)枚舉類(lèi)型實(shí)施算術(shù)、關(guān)系運(yùn)算時(shí),枚舉值轉(zhuǎn)換成整型值參加運(yùn)算,結(jié)果為整型值。所以,如果要將結(jié)果賦給枚舉變量,還要將結(jié)果轉(zhuǎn)換成枚舉值。 例如: d1=d1+2; /是錯(cuò)誤的,因?yàn)榻Y(jié)果為int型。 需要將它強(qiáng)制轉(zhuǎn)換強(qiáng)制轉(zhuǎn)換成枚舉型: d1=(weekday)(d1+2);c+語(yǔ)語(yǔ)言言程程序序設(shè)設(shè)計(jì)計(jì)教教程程 第第5章章構(gòu)構(gòu)造造數(shù)數(shù)據(jù)據(jù)類(lèi)類(lèi)型型5.1 枚舉類(lèi)型枚舉類(lèi)型枚舉類(lèi)型的使用:枚舉類(lèi)型的

7、使用: 枚舉常量、枚舉類(lèi)型的變量可直接進(jìn)行各種形式的關(guān)系運(yùn)算可直接進(jìn)行各種形式的關(guān)系運(yùn)算。 例如: if(city1=3) ; if(city2=beijing); if(shanghai=1); if(city1sun); 枚舉類(lèi)型變量不能直接進(jìn)行輸入不能直接進(jìn)行輸入 例如: cind1; /錯(cuò)誤c+語(yǔ)語(yǔ)言言程程序序設(shè)設(shè)計(jì)計(jì)教教程程 第第4章章函函數(shù)數(shù)f注意注意: : 枚舉常量是常量,不是變量,所以不能對(duì)枚舉常量進(jìn)行賦值。 例如: 在上例中不能進(jìn)行賦值 shanghai=beijing; 枚舉常量的值不是列舉的字符串,其值為整數(shù)。 編譯器對(duì)賦給枚舉變量的對(duì)象(數(shù))進(jìn)行類(lèi)型檢查,如類(lèi)型不相符則

8、發(fā)出警告。 當(dāng)類(lèi)型相 同,而值超出此類(lèi)枚舉類(lèi)型枚舉常量范圍時(shí),也是正常的。123456789101112/* 程序名:p5_1.cpp * 功能: 枚舉類(lèi)型的使用,輸入城市代號(hào),輸出城市名稱(chēng) */#includeusing namespace std;enum city beijing,shanghai,tianjin=6,chongqing;int main() int n; coutinput a city number (beijing-1 to exit):n;枚舉類(lèi)型枚舉類(lèi)型定義定義c+語(yǔ)語(yǔ)言言程程序序設(shè)設(shè)計(jì)計(jì)教教程程 第第5章章構(gòu)構(gòu)造造數(shù)數(shù)據(jù)據(jù)類(lèi)類(lèi)型型【例【例5-15-1】輸入城市

9、代號(hào),輸出城市名稱(chēng)。 5.1 枚舉類(lèi)型枚舉類(lèi)型131415161718192021222324 while(n=beijing) switch(n) case beijing: coutbeijingendl; break; case shanghai: coutshanghaiendl;break; case tianjin: couttianjinendl; break; case chongqing: coutchongqingendl; break; default: coutinvalid city number! n; return 0; input a city number (

10、-1 to exit):1shanghai8invalid city number!-1 c+語(yǔ)語(yǔ)言言程程序序設(shè)設(shè)計(jì)計(jì)教教程程 第第5章章構(gòu)構(gòu)造造數(shù)數(shù)據(jù)據(jù)類(lèi)類(lèi)型型枚舉類(lèi)型的使用枚舉類(lèi)型的使用5.1 枚舉類(lèi)型枚舉類(lèi)型5.2 數(shù)組數(shù)組 數(shù)組:數(shù)組: 數(shù)組是一組在內(nèi)存中依次連續(xù)存放依次連續(xù)存放的、具有同一類(lèi)同一類(lèi)型型的數(shù)據(jù)變量所組成的集合體。其中的每個(gè)變量稱(chēng)為數(shù)組元素,它們屬于同一種數(shù)據(jù)類(lèi)型,數(shù)組元素用數(shù)組名與帶方括號(hào)的數(shù)組下標(biāo)下標(biāo)一起標(biāo)識(shí)。數(shù)組可以是一維的,也可以是多維的。特點(diǎn):特點(diǎn): 若干個(gè)同類(lèi)型若干個(gè)同類(lèi)型的數(shù)據(jù)元素,并且各個(gè)數(shù)據(jù)元素之間存在某種次序關(guān)系次序關(guān)系。這類(lèi)數(shù)據(jù)有一個(gè)共同的特點(diǎn):它們

11、有若干個(gè)同類(lèi)型的數(shù)據(jù)元素,并且各個(gè)數(shù)據(jù)元素之間存在某種次序關(guān)系。 c+語(yǔ)語(yǔ)言言程程序序設(shè)設(shè)計(jì)計(jì)教教程程 第第5章章構(gòu)構(gòu)造造數(shù)數(shù)據(jù)據(jù)類(lèi)類(lèi)型型5.2.1 一維數(shù)組定義與使用一維數(shù)組定義與使用 一維數(shù)組定義的一般形式為:一維數(shù)組定義的一般形式為: 說(shuō)明:說(shuō)明: 數(shù)組元素的類(lèi)型可以是void型以外的任何一種基本數(shù)據(jù)類(lèi)型,也可以是已經(jīng)定義過(guò)的構(gòu)造數(shù)據(jù)類(lèi)型; 數(shù)組名是用戶(hù)自定義的標(biāo)識(shí)符,用來(lái)表示數(shù)組的名稱(chēng),代表數(shù)組元素在內(nèi)存中的起始地址,是一個(gè)地址常量。 常量表達(dá)式必須是unsigned int類(lèi)型的正整數(shù)。表示數(shù)組的大小或長(zhǎng)度,也就是數(shù)組所包含數(shù)據(jù)元素的個(gè)數(shù)。 是數(shù)組下標(biāo)運(yùn)算符,在數(shù)組定義時(shí)用來(lái)限定數(shù)組

12、元素的個(gè)數(shù)。數(shù)據(jù)類(lèi)型 數(shù)組名常量表達(dá)式;c+語(yǔ)語(yǔ)言言程程序序設(shè)設(shè)計(jì)計(jì)教教程程 第第5章章構(gòu)構(gòu)造造數(shù)數(shù)據(jù)據(jù)類(lèi)類(lèi)型型f注意注意: : 數(shù)組屬于構(gòu)造數(shù)據(jù)類(lèi)型,在使用之前必須先進(jìn)行類(lèi)型定義。5.2.1 一維數(shù)組定義與使用一維數(shù)組定義與使用 數(shù)組元素的類(lèi)型可以是void型以外的任何一種基本數(shù)據(jù)類(lèi)型,也可以是已經(jīng)定義過(guò)的構(gòu)造數(shù)據(jù)類(lèi)型; 例如:下面定義了2個(gè)不同類(lèi)型的數(shù)組: int a5; /定義了一個(gè)5個(gè)元素的整型數(shù)組a weekday b10; /定義了一個(gè)10個(gè)元素的枚舉數(shù)組b,weekday 為已定義的枚舉型。 數(shù)據(jù)類(lèi)型相同的多個(gè)數(shù)組可以在同一條語(yǔ)句中予以定義。例如: int a110, a220;

13、 /同時(shí)定義了兩個(gè)整型數(shù)組 數(shù)據(jù)類(lèi)型相同的的簡(jiǎn)單變量和數(shù)組也可以在一個(gè)語(yǔ)句中定義。例如: int x, a20; /同時(shí)定義了一個(gè)整型變量和一個(gè)整型數(shù)組 c+語(yǔ)語(yǔ)言言程程序序設(shè)設(shè)計(jì)計(jì)教教程程 第第5章章構(gòu)構(gòu)造造數(shù)數(shù)據(jù)據(jù)類(lèi)類(lèi)型型5.2.1 一維數(shù)組定義與使用一維數(shù)組定義與使用 數(shù)組定義之后,系統(tǒng)會(huì)將從內(nèi)存中為其分配一塊連續(xù)的存儲(chǔ)空間一塊連續(xù)的存儲(chǔ)空間,從第1個(gè)數(shù)據(jù)元素開(kāi)始依次存放依次存放各個(gè)數(shù)組元素。例如,定義的數(shù)組a其內(nèi)存排列(分配)示意圖如圖5-1所示。 例如: int a5; /定義了一個(gè)5個(gè)元素的整型數(shù)組a c+語(yǔ)語(yǔ)言言程程序序設(shè)設(shè)計(jì)計(jì)教教程程 第第5章章構(gòu)構(gòu)造造數(shù)數(shù)據(jù)據(jù)類(lèi)類(lèi)型型 假設(shè)地

14、址 內(nèi)容 符號(hào)地址 103410a0 103410a4 103410a8 103410ac 103410b0 a a+1 a+2 a+3 a+4 5*sizeof(int) a0 a1 a2 a3 a4 5.2.1 一維數(shù)組定義與使用一維數(shù)組定義與使用 一維數(shù)組初始化:一維數(shù)組初始化: 是指在定義數(shù)組的同時(shí)給數(shù)組中的元素賦值。其一般語(yǔ)法形式為:其一般語(yǔ)法形式為: 初值1,初值2, 初值n稱(chēng)為初值表,初值之間用逗號(hào),分隔, 所有初值用 括起來(lái)。 初值可以是一個(gè)變量表達(dá)式變量表達(dá)式,初值與數(shù)組元素的對(duì)應(yīng)關(guān)系是:初值i給數(shù)組第i個(gè)元素;所以,初值個(gè)數(shù)n不能超過(guò)數(shù)組的大小。 若初值表中初值個(gè)數(shù)(項(xiàng)數(shù))

15、小于數(shù)組的大小,則未指定值的數(shù)組元素被賦值為0 0;但初值表中項(xiàng)數(shù)不能為0。例如: weekday b10=mon,wed,fri; 當(dāng)對(duì)全部數(shù)組元素賦初值時(shí),可以省略數(shù)組的大小可以省略數(shù)組的大小,此時(shí)數(shù)組的實(shí)際大小就是初值列表中初值的個(gè)數(shù)。例如: char str = a, b, c, d, e ; /數(shù)組str的實(shí)際大小為5。 在函數(shù)中定義數(shù)組時(shí),如果沒(méi)有給出初值表,數(shù)組不被初始化,其數(shù)組元素的值為隨機(jī)值隨機(jī)值;在函數(shù)外定義數(shù)組如果沒(méi)有初始化,其數(shù)組元素的值為0。 數(shù)組初值表的可以用一個(gè)逗號(hào)逗號(hào)結(jié)尾,其效果與沒(méi)有逗號(hào)一樣。 數(shù)據(jù)類(lèi)型 數(shù)組名 常量表達(dá)式 =初值1, 初值2, 初值n;c+語(yǔ)

16、語(yǔ)言言程程序序設(shè)設(shè)計(jì)計(jì)教教程程 第第5章章構(gòu)構(gòu)造造數(shù)數(shù)據(jù)據(jù)類(lèi)類(lèi)型型5.2.1 一維數(shù)組定義與使用一維數(shù)組定義與使用 對(duì)一維數(shù)組實(shí)施的存取操作有兩類(lèi):存取數(shù)組元素存取數(shù)組元素與讀取數(shù)組元素讀取數(shù)組元素的地址的地址。數(shù)組元素是通過(guò)數(shù)組名及下標(biāo)來(lái)標(biāo)識(shí)的,這種帶下標(biāo)的數(shù)組元素也稱(chēng)為下標(biāo)變量下標(biāo)變量,下標(biāo)變量可以象簡(jiǎn)單變量一樣參與各種運(yùn)算。 存取一維數(shù)組元素的一般語(yǔ)法形式為: 說(shuō)明:說(shuō)明: 下標(biāo)表達(dá)式可以是變量表達(dá)式變量表達(dá)式,用來(lái)標(biāo)識(shí)數(shù)組元素;不同于數(shù)組定義時(shí)用來(lái)確定數(shù)組長(zhǎng)度的常量表達(dá)式。 當(dāng)定義了一個(gè)長(zhǎng)度為n的一維數(shù)組a,c+規(guī)定數(shù)組的下標(biāo)從從0 0開(kāi)始開(kāi)始,依次為0、1、2、3、n-1。對(duì)應(yīng)的數(shù)組

17、元素分別是a0、a1、an-1,因此下標(biāo)表達(dá)式的值要在0,n-1范圍內(nèi)。例如: a1+2=100; / 將數(shù)組a的第4個(gè)元素賦值100。 數(shù)組名 下標(biāo)表達(dá)式; c+語(yǔ)語(yǔ)言言程程序序設(shè)設(shè)計(jì)計(jì)教教程程 第第5章章構(gòu)構(gòu)造造數(shù)數(shù)據(jù)據(jù)類(lèi)類(lèi)型型5.2.1 一維數(shù)組定義與使用一維數(shù)組定義與使用 【例【例5-25-2】學(xué)生成績(jī)排序。分析分析:學(xué)生成績(jī)由鍵盤(pán)輸入,當(dāng)輸入一個(gè)負(fù)數(shù)時(shí),輸入完畢。 采用直觀的“選擇排序法選擇排序法”進(jìn)行排序,基本步驟如下: 將a0依次與a1an-1比較,選出大者與a0交換;最后a0為 a0an-1中最大者; 將a1依次與a2an-1比較,選出大者與a1交換;最后a1為 a1an-1中

18、最大者; 同理,從i=2到i=n-1, 將ai依次與ai+1an-1比較,選出較大 者存于ai中。c+語(yǔ)語(yǔ)言言程程序序設(shè)設(shè)計(jì)計(jì)教教程程 第第5章章構(gòu)構(gòu)造造數(shù)數(shù)據(jù)據(jù)類(lèi)類(lèi)型型123456789101112131415161718/* p5_2.cpp * 數(shù)組應(yīng)用-選擇排序 */#includeusing namespace std;int main() const int maxn=5; int n,amaxn,i,j; for (n=0;nan; /輸入數(shù)組元素 if (an0) break; for (i=0;in;i+) coutai,t; coutnnendl;數(shù)組定義數(shù)組定義數(shù)組使用數(shù)

19、組使用c+語(yǔ)語(yǔ)言言程程序序設(shè)設(shè)計(jì)計(jì)教教程程 第第5章章構(gòu)構(gòu)造造數(shù)數(shù)據(jù)據(jù)類(lèi)類(lèi)型型1920212223242526272829303132 /對(duì)數(shù)組元素逐趟進(jìn)行選擇排序 for (i=0;in-1;i+) for (j=i+1;jn;j+) /從待排序序列待排序序列中選擇一個(gè)最大的數(shù)組元素 if (aiaj) int t; t=ai; /交換交換數(shù)組元素 ai=aj; aj=t; for (i=0;in;i+)coutai“,t”; /顯示排序結(jié)果 return 0; 80 90 95 70 -195 90 80 70 c+語(yǔ)語(yǔ)言言程程序序設(shè)設(shè)計(jì)計(jì)教教程程 第第5章章構(gòu)構(gòu)造造數(shù)數(shù)據(jù)據(jù)類(lèi)類(lèi)型型5.2

20、.1 一維數(shù)組定義與使用一維數(shù)組定義與使用 4. 4. 數(shù)組的地址數(shù)組的地址 數(shù)組元素的地址通過(guò)數(shù)組名通過(guò)數(shù)組名來(lái)讀取,其格式如下: 由于其地址不是實(shí)際的地址值不是實(shí)際的地址值,稱(chēng)這個(gè)地址表達(dá)式為符號(hào)地址表達(dá)符號(hào)地址表達(dá)式式。例如: 一維數(shù)組元素a5的符號(hào)地址表達(dá)式為a+5。 若a是一個(gè)int型數(shù)組,數(shù)組的符號(hào)地址表達(dá)式a+n所表達(dá)的地址是第n+1個(gè)元素an的地址,代表的實(shí)際地址值為:a+n*sizeof(int) 而不是:a+n。 c+語(yǔ)語(yǔ)言言程程序序設(shè)設(shè)計(jì)計(jì)教教程程 第第5章章構(gòu)構(gòu)造造數(shù)數(shù)據(jù)據(jù)類(lèi)類(lèi)型型數(shù)組名+整型表達(dá)式;5.2.1 一維數(shù)組定義與使用一維數(shù)組定義與使用 c+語(yǔ)語(yǔ)言言程程序序

21、設(shè)設(shè)計(jì)計(jì)教教程程 第第5章章構(gòu)構(gòu)造造數(shù)數(shù)據(jù)據(jù)類(lèi)類(lèi)型型f使用數(shù)組要使用數(shù)組要注意注意: : 在使用數(shù)組時(shí)最常犯的錯(cuò)誤是數(shù)組元素越界,包括上標(biāo)越界和下標(biāo)越界。上標(biāo)越界是指數(shù)組元素的訪問(wèn)地址值超過(guò)了數(shù)組的起始地址;下標(biāo)越界是指數(shù)組元素的訪問(wèn)地址越過(guò)了數(shù)組中最后一個(gè)數(shù)組元素的地址。對(duì)于這種錯(cuò)誤,編譯器無(wú)法知道,往往在運(yùn)行時(shí)出錯(cuò)。因此在程序設(shè)計(jì)時(shí)應(yīng)格外注意。 數(shù)組名是一個(gè)地址常量,不能作為左值(賦值的目標(biāo))。因此,不能將一個(gè)數(shù)組整體拷貝給另外一個(gè)數(shù)組。 例如: int a5,c5,i; a=c;/錯(cuò)誤! 正確的方法是將對(duì)應(yīng)的元素進(jìn)行拷貝,見(jiàn)下列程序段: for(i=0;i5;i+) ai=ci; /將數(shù)

22、組c中元素的值拷貝到數(shù)組c的對(duì)應(yīng)元素中 在函數(shù)中,可以將一個(gè)一維數(shù)組作為函數(shù)的形式參數(shù),用來(lái)接受一個(gè)一維數(shù)組傳遞過(guò)來(lái)的地址。 5.2.2 二維數(shù)組的定義與使用二維數(shù)組的定義與使用 二維數(shù)組的定義的一般形式為: 其中: 常量表達(dá)式1為第1維的元素的個(gè)數(shù),常量表達(dá)式2為第2維元素的個(gè)數(shù)。 二維數(shù)組amn是以長(zhǎng)度為n的一維數(shù)組為元素的數(shù)組,因此,等價(jià)于如下定義方式:例如: int m23; 定義了一個(gè)整型二維數(shù)組m,數(shù)組m也可以用下列方式定義: typedef int m13; / 定義了一個(gè)一維整型數(shù)組m1; m1 m2; / 以m1為類(lèi)型定義數(shù)組m數(shù)據(jù)類(lèi)型 數(shù)組名常量表達(dá)式2常量表達(dá)式1; c+

23、語(yǔ)語(yǔ)言言程程序序設(shè)設(shè)計(jì)計(jì)教教程程 第第5章章構(gòu)構(gòu)造造數(shù)數(shù)據(jù)據(jù)類(lèi)類(lèi)型型typedef 數(shù)據(jù)類(lèi)型 一維數(shù)組名常量表達(dá)式1;一維數(shù)組名 二維數(shù)組名常量表達(dá)式2;5.2.2 二維數(shù)組的定義與使用二維數(shù)組的定義與使用 如果一維數(shù)組描述排列成一行一行的數(shù)據(jù),那么,二維數(shù)組則描述若干行這樣的數(shù)據(jù)。因此,二維數(shù)組可以看作是數(shù)學(xué)上的一個(gè)矩陣。第1維元素個(gè)數(shù)為矩陣的列數(shù),第2維元素個(gè)數(shù)為矩陣的行數(shù)。 二維數(shù)組的定義格式可以寫(xiě)成: 定義一個(gè)二維數(shù)組后,系統(tǒng)為它分配一塊連續(xù)連續(xù)的內(nèi)存空間。 二維數(shù)組amn占內(nèi)存空間的計(jì)算公式為: 數(shù)據(jù)類(lèi)型 數(shù)組名行數(shù)列數(shù); c+語(yǔ)語(yǔ)言言程程序序設(shè)設(shè)計(jì)計(jì)教教程程 第第5章章構(gòu)構(gòu)造造數(shù)數(shù)

24、據(jù)據(jù)類(lèi)類(lèi)型型sizeof(數(shù)組名);或 m*sizeof(a0); 或 m*n*sizeof(數(shù)據(jù)類(lèi)型)5.2.2 二維數(shù)組的定義與使用二維數(shù)組的定義與使用 既然一個(gè)二維數(shù)組是由若干個(gè)一維數(shù)組排列構(gòu)成,二維數(shù)組在內(nèi)存中的排列順序?yàn)?先順序排列每個(gè)一維元素先順序排列每個(gè)一維元素, ,構(gòu)成一維數(shù)組構(gòu)成一維數(shù)組;再將各個(gè)一維數(shù)組順序排列,構(gòu)成二維數(shù)組。 int m23的排列順序?yàn)椋合认葘?個(gè)int元素排列組成2個(gè)一維數(shù)組m0, m1。 m0:m00,m01,m02 m1:m10,m11,m12 再再將2個(gè)一維數(shù)組排成一個(gè)二維數(shù)組。 m: m0, m1 數(shù)組m在內(nèi)存中的排列圖如圖所示。c+語(yǔ)語(yǔ)言言程程

25、序序設(shè)設(shè)計(jì)計(jì)教教程程 第第5章章構(gòu)構(gòu)造造數(shù)數(shù)據(jù)據(jù)類(lèi)類(lèi)型型 實(shí)際地址 內(nèi)容 符號(hào)地址 103b2000 m00 m, m0 103b2004 m01 m0+1 103b2008 m02 m0+2 103b200c m10 m1 103b2010 m11 m1+1 103b2014 m12 m1+2 5.2.2 二維數(shù)組的定義與使用二維數(shù)組的定義與使用 二維數(shù)組的初始化二維數(shù)組的初始化 :其中初值表具有兩種形式:嵌套的初值表,線性初值表。 (1)(1) 嵌套初值表嵌套初值表以二維數(shù)組mmn為例,嵌套初值表的格式為: 嵌套初值表由一維初值表嵌套構(gòu)成,各層構(gòu)成規(guī)則與一維數(shù)組的初值表相同。 例如: in

26、t m34=1,2,3,4,3,4,5,6,5,6,7,8; /m數(shù)組元素被全部初始化 int a23=1,0,0,1; /初始化了部分?jǐn)?shù)組元素 int b3=1,2,3,; /初始化了全部數(shù)組元素 int d3=1,3,5,5,7,9; /初始化了全部數(shù)組元素,省略了高維元素個(gè)數(shù) 數(shù)據(jù)類(lèi)型 數(shù)組名 常量表達(dá)式2常量表達(dá)式1=初值表; c+語(yǔ)語(yǔ)言言程程序序設(shè)設(shè)計(jì)計(jì)教教程程 第第5章章構(gòu)構(gòu)造造數(shù)數(shù)據(jù)據(jù)類(lèi)類(lèi)型型m的初值表=m0初值表,m1初值表,mm-1初值表mi初值表=mi0初值表, mi1初值表,min-1初值表;i從0到m-1;5.2.2 二維數(shù)組的定義與使用二維數(shù)組的定義與使用(2 2)線

27、形初值表)線形初值表 線形初值表與一維數(shù)組的初值表相同,初值表的項(xiàng)數(shù)不超過(guò)各維元素個(gè)數(shù)的乘積(總元素個(gè)數(shù))。 數(shù)組元素按內(nèi)存排列順序依次從初值表中取值,下列各數(shù)組使用了線形初值表,結(jié)果與使用嵌套初值表相同。 例如: int m34=1,2,3,4,3,4,5,6,5,6,7,8; /m數(shù)組元素被全部初始化 int a23=1,0,0,0,1,1; /初始化了全部數(shù)組元素, 一部分元素未給初值 int b 3=1,0,0,0,0,0; /初始化了全部數(shù)組元素, 省略了高維元素個(gè)數(shù) 當(dāng)使用線形初值表而省略高維元素個(gè)數(shù)時(shí),高維元素個(gè)數(shù)為: 例如: int b 3=1,0,0,0;/高維元素個(gè)數(shù)為2c

28、+語(yǔ)語(yǔ)言言程程序序設(shè)設(shè)計(jì)計(jì)教教程程 第第5章章構(gòu)構(gòu)造造數(shù)數(shù)據(jù)據(jù)類(lèi)類(lèi)型型 向上取整數(shù)(線形初值表項(xiàng)數(shù)/低維元素個(gè)數(shù)) 5.2.2 二維數(shù)組的定義與使用二維數(shù)組的定義與使用(3 3)二維數(shù)組的存?。┒S數(shù)組的存取 存取維數(shù)組元素的格式為: 說(shuō)明:說(shuō)明: 行下標(biāo)表達(dá)式與列下標(biāo)表達(dá)式的值同樣從0開(kāi)始,aij表示數(shù)組的第i+1行、第j+1列的元素。由于數(shù)組元素是變量,可以對(duì)其進(jìn)行各種各種操作。 數(shù)組元素如果定義數(shù)組amn, 即數(shù)組第1維大小為n, 第2維大小為m。aij的排列位置與在內(nèi)存中的地址計(jì)算公式如下: 例如: a, a0: 為數(shù)組a的起始地址, 即a00的地址; ai+j: 為數(shù)組的第i+1行的

29、第j+1元素的地址,即aij的地址; c+語(yǔ)語(yǔ)言言程程序序設(shè)設(shè)計(jì)計(jì)教教程程 第第5章章構(gòu)構(gòu)造造數(shù)數(shù)據(jù)據(jù)類(lèi)類(lèi)型型數(shù)組名 行下標(biāo)表達(dá)式 列下標(biāo)表達(dá)式aij的排列位置=第1維大小n*i+j+1;aij的地址=a的起始地址+(第1維大小n*i+j)*sizeof(數(shù)據(jù)類(lèi)型)1234567891011121314151617181920/* p5_3.cpp * 求學(xué)生多門(mén)功課的總分,并求所有學(xué)生各門(mén)功課的平均分 */#includeusing namespace std;int main() const int maxn=100,coursen=5; int n,scoremaxncoursen+1=

30、0; float avercoursen+1=0; for (n=0;nmaxn;n+) /輸入學(xué)生成績(jī) for(int j=0;jscorenj; if (scoren00) break; /輸入-1,結(jié)束輸入 for (int i=0;in;i+) /計(jì)算每個(gè)學(xué)生的總分 for(int j=0;jcoursen;j+) scoreicoursen=scoreicoursen+scoreij; 二維數(shù)組定義二維數(shù)組定義并初始化并初始化二維數(shù)組使用二維數(shù)組使用c+語(yǔ)語(yǔ)言言程程序序設(shè)設(shè)計(jì)計(jì)教教程程 第第5章章構(gòu)構(gòu)造造數(shù)數(shù)據(jù)據(jù)類(lèi)類(lèi)型型21222324252627282930313233343636

31、3738 for (int j=0;jcoursen+1;j+) /計(jì)算每門(mén)課程的平均分 for (int i=0; in; i+) averj=averj+scoreij; averj=averj/n; for (i=0;in;i+) /輸出每個(gè)人的成績(jī)與總分 for(int j=0;jcoursen+1;j+) coutscoreijt; coutendl; cout-endl; for (i=0;icoursen+1;i+) /輸出每門(mén)功課的平均分 coutaverit; coutendl; return 0; 70 71 72 73 7482 83 84 85 8692 93 94 9

32、5 96-1 0 0 0 070 71 72 73 74 36082 83 84 85 86 42092 93 94 95 96 470-81.3333 82.3333 83.3333 84.3333 85.3333 416.667 c+語(yǔ)語(yǔ)言言程程序序設(shè)設(shè)計(jì)計(jì)教教程程 第第5章章構(gòu)構(gòu)造造數(shù)數(shù)據(jù)據(jù)類(lèi)類(lèi)型型5.2.3 多維數(shù)組多維數(shù)組 (1 1)三維以及高于三維的數(shù)組稱(chēng)為多維數(shù)組)三維以及高于三維的數(shù)組稱(chēng)為多維數(shù)組 多維數(shù)組的定義與二維數(shù)組類(lèi)似,可以一次定義,也可以逐步由低維數(shù)組定義。 例如: int b234; /定義了一個(gè)三維數(shù)組 也可用下列方式步定義: typedef int b134;

33、b1 b2; 多維數(shù)組在內(nèi)存的排列方式同樣是先排低維數(shù)組,由低向高依次排列由低向高依次排列。如:b234的排列順序?yàn)椋?b00:b000,b001,b002,b003 b0 b01:b010,b011,b012,b013b b02:b020,b021,b022,b023 b10:b100,b101,b102,b103 b1 b11:b110,b111,b112,b113 b12:b120,b121,b122,b123c+語(yǔ)語(yǔ)言言程程序序設(shè)設(shè)計(jì)計(jì)教教程程 第第5章章構(gòu)構(gòu)造造數(shù)數(shù)據(jù)據(jù)類(lèi)類(lèi)型型5.2.3 多維數(shù)組多維數(shù)組 (2)多維數(shù)組的初始化與存?。┒嗑S數(shù)組的初始化與存取 多維數(shù)組的初始化形式與二

34、維數(shù)組類(lèi)似:有嵌套初值表、線性初值表兩種形式。使用線性初值表初始化時(shí),數(shù)組元素按內(nèi)存排列順序依次從初值表中取值。 對(duì)多維數(shù)組進(jìn)行存取包括對(duì)數(shù)組元素的存取和對(duì)數(shù)組元素的地址的讀取,當(dāng)一個(gè)多維數(shù)組的下標(biāo)數(shù)與維數(shù)相同時(shí),為對(duì)數(shù)組元素的存取。 當(dāng)下標(biāo)個(gè)數(shù)小于維數(shù)時(shí)表示的是一個(gè)地址,表示地址時(shí),下標(biāo)也不能越界。 如:下列都是b234的地址表達(dá)式。 b1; /b100的地址; b2; /錯(cuò)誤,下標(biāo)越界; b0+1; /與b01相同,b010的地址。 b12; /b120的地址 b12+4; /b124的地址,但數(shù)組b中沒(méi)有b124這個(gè)元素, 故指向了其它地方。 c+語(yǔ)語(yǔ)言言程程序序設(shè)設(shè)計(jì)計(jì)教教程程 第第5

35、章章構(gòu)構(gòu)造造數(shù)數(shù)據(jù)據(jù)類(lèi)類(lèi)型型123456789101112131415161718/* 5_4.cpp * 多維數(shù)組的各種地址表達(dá)式 */#includeusing namespace std;int main() const int k=3,m=4,n=5; int k=2,m=3,n=4; short int bkmn; coutadd of b: &b=&bendl; cout b=bendl; cout &b000=&b000endl; coutadd of bk: &bk=&bkendl; cout bk=bkendl; cout b+k =(b+k)endl; cout &b0+k

36、=(&b0+k)endl; cout &bk00=&bk00endl;c+語(yǔ)語(yǔ)言言程程序序設(shè)設(shè)計(jì)計(jì)教教程程 第第5章章構(gòu)構(gòu)造造數(shù)數(shù)據(jù)據(jù)類(lèi)類(lèi)型型1920212223242526272829303132coutadd of bkm: &bkm=&bkmendl;cout bkm=bkmendl;cout bk+m =(bk+m)endl;cout &b00+k*m+m=(&b00+k*m+m)endl;cout &bkm0=&bkm0endl;cout &b00+(k*sizeof(b0)/sizeof(b00)+m=;cout(&b00+(k*sizeof(b0)/sizeof(b00)+m)e

37、ndl;coutadd of bkmn: &bkmn=&bkmnendl;cout bkm+n=(bkm+n)endl;cout &b000+k*m*n+m*n+n=(&b000+k*m*n+m*n+n)endl;cout &b000+(sizeof(b0)*k+sizeof(b00)*m)/sizeof(b000)+n=;cout(&b000+(sizeof(b0)*k+sizeof(b00)*m)/sizeof(b000)+n)endl;return 0; add of b: &b=0012fef0add of b: &b=0012fef0 b=0012fef0 b=0012fef0 &b

38、000=0012fef0 &b000=0012fef0add of bk: &bk=0012ff40add of bk: &bk=0012ff40 bk=0012ff40 bk=0012ff40 b+k =0012ff40 b+k =0012ff40 &b0+k=0012ff40 &b0+k=0012ff40 &bk00=0012ff40 &bk00=0012ff40add of bkm: &bkm=0012ff5eadd of bkm: &bkm=0012ff5e bkm=0012ff5e bkm=0012ff5e bk+m =0012ff5e bk+m =0012ff5e &b00+k &

39、b00+k* *m+m=0012ff5em+m=0012ff5e &bkm0=0012ff5e &bkm0=0012ff5e &b00+(k &b00+(k* *sizeof(b0)/sizeof(b00)+m=0012ff5esizeof(b0)/sizeof(b00)+m=0012ff5eadd of bkmn: &bkmn=0012ff66add of bkmn: &bkmn=0012ff66 bkm+n=0012ff66 bkm+n=0012ff66 &b000+k*m*n+m*n+n=0012ff66 &b000+(sizeof(b0)*k+sizeof(b00)*m)/sizeof

40、(b000)+n=0012ff66 c+語(yǔ)語(yǔ)言言程程序序設(shè)設(shè)計(jì)計(jì)教教程程 第第5章章構(gòu)構(gòu)造造數(shù)數(shù)據(jù)據(jù)類(lèi)類(lèi)型型5.2.4 數(shù)組與函數(shù)數(shù)組與函數(shù) 數(shù)組名數(shù)組名是一個(gè)地址,不能當(dāng)作一個(gè)左值,但是可以作為函數(shù)的形參,接受實(shí)參傳送來(lái)的地址。當(dāng)形參接受實(shí)參傳送來(lái)的地址后,形參數(shù)組與實(shí)參共享內(nèi)存中的一塊空間共享內(nèi)存中的一塊空間。函數(shù)體通過(guò)形參對(duì)數(shù)組內(nèi)容的改變會(huì)直接作用到實(shí)參上。 數(shù)組名作為形參是數(shù)組應(yīng)用的一個(gè)重要方面。 注意注意: (1)(1)使用數(shù)組名傳遞地址時(shí),雖然傳遞是地址,但形參與實(shí)參的地址 (數(shù)組)類(lèi)型應(yīng)一致類(lèi)型應(yīng)一致。 (2)(2)形式參數(shù)中數(shù)組元素個(gè)數(shù)沒(méi)有給定沒(méi)有給定,因此,在函數(shù)體中,對(duì)數(shù)組

41、存取的下標(biāo)可以為任意值而不會(huì)出現(xiàn)編譯錯(cuò)誤。但是,當(dāng)這個(gè)下標(biāo)超過(guò)超過(guò)了實(shí)參數(shù)組的元素個(gè)數(shù)范圍時(shí),存取的就不是實(shí)參數(shù)組中的內(nèi)容了。 c+語(yǔ)語(yǔ)言言程程序序設(shè)設(shè)計(jì)計(jì)教教程程 第第5章章構(gòu)構(gòu)造造數(shù)數(shù)據(jù)據(jù)類(lèi)類(lèi)型型123456789101112131415161718192021/* 5_5.cpp * 利用對(duì)一個(gè)多維數(shù)組的某列排序的函數(shù), * 將學(xué)生某門(mén)功課的成績(jī)分班級(jí)排序 */#includeusing namespace std;const col=5;enum dir asc,des;void sort(int acol, int n, int cn, dir d) /排序 int tcol; /用

42、于暫存一行數(shù)據(jù) for (int i=0;in-1;i+) for (int j=i+1;jn;j+) /從待排序序列中選擇一個(gè)最大(小)的數(shù)組元素 if (aicnajcn&d=asc) memcpy(t,ai,sizeof(t); /交換數(shù)組行 memcpy(ai,aj,sizeof(t); memcpy(aj,t,sizeof(t); c+語(yǔ)語(yǔ)言言程程序序設(shè)設(shè)計(jì)計(jì)教教程程 第第5章章構(gòu)構(gòu)造造數(shù)數(shù)據(jù)據(jù)類(lèi)類(lèi)型型數(shù)組作為函數(shù)形式參數(shù)數(shù)組作為函數(shù)形式參數(shù) 222324252627282930313233343536373839404142 43int main() const coursen=5

43、; int n,scorecoursen=20060101, 1, 82, 86, 0, 20060203, 2, 80, 80, 0, 20060204, 2, 86, 90, 0, 20060205, 2, 90, 83, 0, 20060102, 1, 75, 86, 0; n=sizeof(score)/sizeof(score0); for (int i=0;in;i+) /計(jì)算每個(gè)學(xué)生的總分 for(int j=2;jcoursen-1;j+) scoreicoursen-1=scoreicoursen-1+scoreij; sort(score,n,4,des); /按總分降序排

44、序 sort(score,n,1,asc); /按班號(hào)的升序排序 for (i=0;in;i+) /輸出每個(gè)人的成績(jī)與總分 for(int j=0;jcoursen;j+) coutscoreijt; coutendl; return 0; 20060101200601011 18282868616816820060102200601021 17575868616116120060204200602042 28686909017617620060205200602052 29090838317317320060203200602032 280808080160160 c+語(yǔ)語(yǔ)言言程程序序設(shè)設(shè)計(jì)

45、計(jì)教教程程 第第5章章構(gòu)構(gòu)造造數(shù)數(shù)據(jù)據(jù)類(lèi)類(lèi)型型數(shù)組作為函數(shù)形式參數(shù)數(shù)組作為函數(shù)形式參數(shù) 5.2.5 字符數(shù)組與字符串字符數(shù)組與字符串 存放字符型數(shù)據(jù)的數(shù)組稱(chēng)為字符數(shù)組字符數(shù)組。字符數(shù)組也分為一維數(shù)組和多維數(shù)組。 前述的數(shù)組的定義及初始化同樣適用于字符數(shù)組,除此以外,c+對(duì)字符數(shù)組的初始化還可以使用字符串形式。 1.1.用字符進(jìn)行初始化用字符進(jìn)行初始化 例如: char s1 =c,h,i,n,a; char s2 4=h,o,w,a,r,e,y,o,u; 2.用字符串進(jìn)行初始化用字符串進(jìn)行初始化 例如: char s3 =china; char s4 4=how, are, you; c+語(yǔ)語(yǔ)

46、言言程程序序設(shè)設(shè)計(jì)計(jì)教教程程 第第5章章構(gòu)構(gòu)造造數(shù)數(shù)據(jù)據(jù)類(lèi)類(lèi)型型3. 3. 字符數(shù)組的使用字符數(shù)組的使用 字符數(shù)組也是數(shù)組,我們同樣可以通過(guò)數(shù)組名及下標(biāo)引用數(shù)組中的元素。 為方便對(duì)字符與字符串的處理,c+提供了許多專(zhuān)門(mén)處理字符與字符串的函數(shù),這些函數(shù)原型在各自的頭文件中定義。 下表列出了常用的字符與字符串處理函數(shù)的調(diào)用方法與功能簡(jiǎn)介,函數(shù)原形與詳細(xì)的功能可以從c+編譯器的幫助文檔中獲得。函數(shù)的用法函數(shù)的用法函數(shù)的用法函數(shù)的用法函數(shù)的用法函數(shù)的用法strlen(字符串)返回字符串的長(zhǎng)度(不包括0) cstring strset(字符數(shù)組, 字符c)將字符數(shù)組中的所有字符都設(shè)為指定字符c, 并以0

47、結(jié)尾strlwr(字符串)將字符串中的所有字符轉(zhuǎn)換成小寫(xiě)字符strupr(字符串)將字符串中的所有字符轉(zhuǎn)換成大寫(xiě)字符strcmp(串s1, 串s2)比較兩個(gè)字符串的大小,即按從左到右的順序逐個(gè)比較對(duì)應(yīng)字符的ascii碼值。若s1大于s2,返回1;若s1小于s2,返回-1;若s1等于s2,返回0。串s1、s2可以是字符串常量c+語(yǔ)語(yǔ)言言程程序序設(shè)設(shè)計(jì)計(jì)教教程程 第第5章章構(gòu)構(gòu)造造數(shù)數(shù)據(jù)據(jù)類(lèi)類(lèi)型型5.2.5 字符數(shù)組與字符串字符數(shù)組與字符串 常用字符與字符串處理函數(shù)常用字符與字符串處理函數(shù)函數(shù)的用法函數(shù)的用法函數(shù)的用法函數(shù)的用法函數(shù)的用法函數(shù)的用法 strcpy(串s1, 串s2) 將字符串s2拷

48、貝到s1所指的存儲(chǔ)空間中,然后返回s1。 其中, 串s2可以是字符串常量 cstring strcat(串s1, 串s2)返回字符串的長(zhǎng)度(不包括0) ctype toupper(字符)將字符數(shù)組中的所有字符都設(shè)為指定字符c, 并以0結(jié)尾tolower(字符)將字符串中的所有字符轉(zhuǎn)換成小寫(xiě)字符cstdlibatoi(字符串)將字符串中的所有字符轉(zhuǎn)換成大寫(xiě)字符atol(字符串)比較兩個(gè)字符串的大小,即按從左到右的順序逐個(gè)比較對(duì)應(yīng)字符的ascii碼值。若s1大于s2,返回1;若s1小于s2,返回-1;若s1等于s2,返回0。串s1、s2可以是字符串常量 atof(字符串)將字符串s2拷貝到s1所指

49、的存儲(chǔ)空間中,然后返回s1。 其中, 串s2可以是字符串常量 c+語(yǔ)語(yǔ)言言程程序序設(shè)設(shè)計(jì)計(jì)教教程程 第第5章章構(gòu)構(gòu)造造數(shù)數(shù)據(jù)據(jù)類(lèi)類(lèi)型型5.2.5 字符數(shù)組與字符串字符數(shù)組與字符串 常用字符與字符串處理函數(shù)常用字符與字符串處理函數(shù)12345678910111213141516171819/* p5_6.cpp * 字符串排序與查找 */#includeusing namespace std;const namelen=20;void order(char namenamelen,int n)/字符串排序 char tempnamelen; for(int i=0;in-1;i+)/選擇排序 fo

50、r(int j=i+1;j0)/比較兩個(gè)字符串的大小 strcpy(temp,namei);/字符串交換 strcpy(namei,namej); strcpy(namej,temp); c+語(yǔ)語(yǔ)言言程程序序設(shè)設(shè)計(jì)計(jì)教教程程 第第5章章構(gòu)構(gòu)造造數(shù)數(shù)據(jù)據(jù)類(lèi)類(lèi)型型2021222324252627282930313233343536373839404142434445int find(char namenamelen,int n,char searchnamenamelen) for(int i=0;i0) /未找完,但找不到,返回0 return 0; return 0; /找完,找不到,返回0i

51、nt main()char nametabnamelen=gongjing,liuna,huangpin,zhouzijun,lianxiaolei,chenhailing,cuipeng,liuping;char searchnamenamelen;int n=sizeof(nametab)/namelen;order(nametab,n);for(int i=0;in;i+) /輸出排序后的各姓名couti+1tnametabiendl;coutsearchname;if(n=find(nametab,n,searchname)coutposition:nendl;elsecoutnot

52、found!endl;return 0; c+語(yǔ)語(yǔ)言言程程序序設(shè)設(shè)計(jì)計(jì)教教程程 第第5章章構(gòu)構(gòu)造造數(shù)數(shù)據(jù)據(jù)類(lèi)類(lèi)型型5.3 指針指針 指針是c+語(yǔ)言最重要特性之一,也是c+的主要難點(diǎn)。 指針提供了一種較為直觀的地址地址操作的手段,正確地使用指針,可以方便、靈活而有效地組織和表示復(fù)雜的數(shù)據(jù)。 指針在c+程序中扮演著非常重要的角色,從某種程度上而言,如果不能深刻的理解深刻的理解指針的概念,正確而有效的掌握指針,就不可能真正學(xué)好c+,但是指針也是我們最容易產(chǎn)生困惑并導(dǎo)致程序出錯(cuò)的原因之一。 c+語(yǔ)語(yǔ)言言程程序序設(shè)設(shè)計(jì)計(jì)教教程程 第第5章章構(gòu)構(gòu)造造數(shù)數(shù)據(jù)據(jù)類(lèi)類(lèi)型型5.3 指針指針1. 1. 地址與指針地

53、址與指針地址:地址: 當(dāng)定義一個(gè)變量后,內(nèi)存中將會(huì)劃出一塊由若干個(gè)存儲(chǔ)單元組成的區(qū)域,用于保存該變量的數(shù)據(jù)。在內(nèi)存里每個(gè)存儲(chǔ)單元都有各自的編號(hào),稱(chēng)為地址地址。指針: 在c+中,提供了指針指針類(lèi)型,它是一種用于存放內(nèi)存單元地址的變量類(lèi)型,地址就存儲(chǔ)在這種指針類(lèi)型的變量中。正因?yàn)橹羔樧兞看鎯?chǔ)的是地址,用它來(lái)指明內(nèi)存單元,所以形象地稱(chēng)這種地址變量為指針指針。 c+語(yǔ)語(yǔ)言言程程序序設(shè)設(shè)計(jì)計(jì)教教程程 第第5章章構(gòu)構(gòu)造造數(shù)數(shù)據(jù)據(jù)類(lèi)類(lèi)型型5.3 指針指針2. 2. 指針變量的定義指針變量的定義 每存儲(chǔ)一個(gè)地址,就要定義一個(gè)指針變量。定義指針變量的格式如下: 數(shù)據(jù)類(lèi)型是指針變量所指向?qū)ο蟮臄?shù)據(jù)類(lèi)型,它可以是基

54、本數(shù)據(jù)類(lèi)型,也可以是構(gòu)造數(shù)據(jù)類(lèi)型以及void 類(lèi)型。 變量名是用戶(hù)自定義的標(biāo)識(shí)符。 *表示聲明的變量是一個(gè)指針變量,而不是普通變量。 例如: int *ip; /定義了一個(gè)int型的指針變量ip float *fp; /定義了一個(gè)float型指針變量fp typedef int a10; a *ap; / 定義了一個(gè)a類(lèi)型的指針變量ap sizeof(ip)=sizeof(fp)=sizeof(ap)=4; 數(shù)據(jù)類(lèi)型 * 變量名; c+語(yǔ)語(yǔ)言言程程序序設(shè)設(shè)計(jì)計(jì)教教程程 第第5章章構(gòu)構(gòu)造造數(shù)數(shù)據(jù)據(jù)類(lèi)類(lèi)型型5.3 指針指針 3 3指針的初始化與賦值指針的初始化與賦值 定義了一個(gè)指針,只是得到了一個(gè)

55、用于存儲(chǔ)地址的指針變量。若指針變量既沒(méi)有初始化,也沒(méi)有賦值,其地址值是一個(gè)隨機(jī)的數(shù)。 (1)不要將一個(gè)非地址常量、變量以及無(wú)意義的實(shí)際地址賦給指針變量。如: int *p=100; /錯(cuò)誤,100是一個(gè)int型常量,不是一個(gè)地址常量。 int *p=(char *)100; /危險(xiǎn)!100是一個(gè)無(wú)意義的實(shí)際地址, 可能指向危險(xiǎn)區(qū)域。(2)可以使用一個(gè)已初始化的指針去給另一個(gè)指針賦值,但類(lèi)型必須一致如果不一致,可 進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換。 char *p=null; int *ip=(int *)p+100; /將char型指針強(qiáng)制轉(zhuǎn)化成int型指針。(3)對(duì)于基本數(shù)據(jù)類(lèi)型的變量、數(shù)組元素我們可以使用

56、取地址運(yùn)算符&來(lái)獲得它們的地址, 但是也只有類(lèi)型一致才能賦值。 int a10; /定義int型數(shù)組 int *i_pointer=a; /定義并初始化int型指針 (4)有一種特殊的void類(lèi)型指針,可以存儲(chǔ)任何的類(lèi)型地址;但將一個(gè)void類(lèi)型的地址賦值 給非void類(lèi)型的指針變量,要使用類(lèi)型強(qiáng)制轉(zhuǎn)換。 void v; /錯(cuò)誤,不能定義void類(lèi)型的變量 void *vp; /定義void類(lèi)型的指針 數(shù)據(jù)類(lèi)型 *指針變量名=初始地址表達(dá)式; c+語(yǔ)語(yǔ)言言程程序序設(shè)設(shè)計(jì)計(jì)教教程程 第第5章章構(gòu)構(gòu)造造數(shù)數(shù)據(jù)據(jù)類(lèi)類(lèi)型型5.3 指針指針4 4指針運(yùn)算指針運(yùn)算 指針變量存放的是地址地址,因此指針的運(yùn)算

57、實(shí)際上就是地址的運(yùn)算指針的運(yùn)算實(shí)際上就是地址的運(yùn)算,但正是由于指針的這一特殊性,使指針?biāo)苓M(jìn)行的運(yùn)算受到了一定的限制。指針通常進(jìn)行下列幾種運(yùn)算:賦值運(yùn)算、取值運(yùn)算、算術(shù)運(yùn)算、相減運(yùn)算、比較運(yùn)算。 (1 1)* * 和和& &運(yùn)算運(yùn)算 * *稱(chēng)為指針運(yùn)算符指針運(yùn)算符。出現(xiàn)在數(shù)據(jù)定義語(yǔ)句中時(shí),* 在數(shù)據(jù)類(lèi)型與變量之間,是一個(gè)二二元運(yùn)算符元運(yùn)算符,用來(lái)定義指針變量;出現(xiàn)指針變量表達(dá)式左邊左邊時(shí),是一個(gè)一元運(yùn)算符,表示訪問(wèn)指針?biāo)笇?duì)象的內(nèi)容所指對(duì)象的內(nèi)容。 例如: int a4=1,2,3; int *ip=&a2; cout*ip; / 輸出ip指向單元的內(nèi)容,內(nèi)容為整型數(shù)3 *ip=100; /

58、將100賦給a2;c+語(yǔ)語(yǔ)言言程程序序設(shè)設(shè)計(jì)計(jì)教教程程 第第5章章構(gòu)構(gòu)造造數(shù)數(shù)據(jù)據(jù)類(lèi)類(lèi)型型5.3 指針指針(2)指針與整數(shù)的加減運(yùn)算)指針與整數(shù)的加減運(yùn)算 指針的加減運(yùn)算與普通變量的加減運(yùn)算不同,由于指針存儲(chǔ)的是變量的內(nèi)存地址,指針加上或減去一個(gè)整數(shù)n,表示指針從當(dāng)前位置向后或向前移動(dòng)n個(gè)sizeof(數(shù)據(jù)類(lèi)型)長(zhǎng)度的存儲(chǔ)單元。因此對(duì)于不同的數(shù)據(jù)類(lèi)型,n的實(shí)際大小就不同。 例如程序段: int b234; typedef char a10; int *p1=b10; int *p2=(int *)b1; int *p3=(int *)(b+1); double *pd=(double *)p3

59、; a *pa=(a *)p3; coutp1,p2,p3,pd,paendl; coutp1+1,p2+1,p3+1,pd+1,pa+1endl; 0013ff80, 0013ff80, 0013ff80, 0013ff80, 0013ff800013ff80, 0013ff80, 0013ff80, 0013ff80, 0013ff800013ff84, 0013ff84, 0013ff84, 0013ff88, 0013ff8a c+語(yǔ)語(yǔ)言言程程序序設(shè)設(shè)計(jì)計(jì)教教程程 第第5章章構(gòu)構(gòu)造造數(shù)數(shù)據(jù)據(jù)類(lèi)類(lèi)型型5.3 指針指針(3 3)指針自增、自減運(yùn)算)指針自增、自減運(yùn)算 指針的自增、自減運(yùn)算是

60、指針加減運(yùn)算的特例。指針的自增或自減表示指針從當(dāng)前位置向后或向前移動(dòng)sizeof(數(shù)據(jù)類(lèi)型)長(zhǎng)度的存儲(chǔ)單元。 例如:程序段: int *p, *q, a=5; p=&a; p+; /指針p后移4個(gè)字節(jié) *p+; /先讀取p指向的變量a的值5,然后使指針p后移4個(gè)字節(jié) (*p)+; /讀取p指向的變量a的值,然后使p指向的變量a自增1 *+p; /先使指針p后移4個(gè)字節(jié),然后讀取p指向的變量的值 +*p; /將p指向的變量a自增1 *q+=*p+; /這是一種常用的表達(dá)式,依次執(zhí)行:*q=*p, q+, p+(4 4)兩指針相減)兩指針相減 當(dāng)兩個(gè)指針指向同一數(shù)組時(shí)指向同一數(shù)組時(shí),兩個(gè)指針的相減

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論