數(shù)組指針及字符串課件_第1頁(yè)
數(shù)組指針及字符串課件_第2頁(yè)
數(shù)組指針及字符串課件_第3頁(yè)
數(shù)組指針及字符串課件_第4頁(yè)
數(shù)組指針及字符串課件_第5頁(yè)
已閱讀5頁(yè),還剩35頁(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、C+程序設(shè)計(jì)新世紀(jì)應(yīng)用型高等教育教材編審委員會(huì) 組編主編 羅燁 李秉璋第二版新世紀(jì)應(yīng)用型高等教育軟件專業(yè)系列規(guī)劃教材第4章 數(shù)組、指針及字符串4.1 數(shù)組3數(shù)組是同類型數(shù)據(jù)的有序集合。它由若干個(gè)元素組成,每個(gè)元素?cái)?shù)據(jù)類型都相同,在內(nèi)存中占用相同大小的存儲(chǔ)單元。各元素具有明確的次序關(guān)系,且在內(nèi)存中連續(xù)存放。數(shù)組中的每一個(gè)元素都用數(shù)組名與若干個(gè)帶方括號(hào)的下標(biāo)表示。下標(biāo)的個(gè)數(shù)表示數(shù)組的維數(shù),數(shù)組可以是一維的,也可以是多維的。數(shù)組的維數(shù)和每一維的元素個(gè)數(shù)必須在定義數(shù)組時(shí)確定,在程序運(yùn)行時(shí)不能改變。4.1 數(shù)組44.1.1 一維數(shù)組1.一維數(shù)組的定義和存儲(chǔ)方式數(shù)組在使用前也必須先定義。語(yǔ)法格式為:其中:

2、(1)數(shù)組元素的類型可以是void以外的任何類型。(2)數(shù)組名是用戶自定義的標(biāo)識(shí)符。在C+中數(shù)組名表示數(shù)組首元素在內(nèi)存中的地址,它是一個(gè)地址常量,因此數(shù)組名不能修改,不能作為左值出現(xiàn)。(3)常量表達(dá)式的值必須是unsignedint類型的正整數(shù)或常變量,不能是變量。該值表示數(shù)組的大小,亦稱數(shù)組的長(zhǎng)度,表示數(shù)組元素的個(gè)數(shù)。(4)是數(shù)組下標(biāo)運(yùn)算符,但是在數(shù)組定義時(shí)用來(lái)規(guī)定數(shù)組的長(zhǎng)度。4.1 數(shù)組54.1.1 一維數(shù)組2.一維數(shù)組的初始化與定義普通變量時(shí)可以同時(shí)初始化一樣,定義一個(gè)數(shù)組時(shí)也可進(jìn)行初始化。例如: intf10=0,1,1,2,3,5,8,13,21,34;以上f數(shù)組已對(duì)全部數(shù)組元素初始

3、化,也可以省略數(shù)組的長(zhǎng)度,即:intf=0,l,1,2,3,5,8,13,21,34;編譯器會(huì)根據(jù)初始化值的個(gè)數(shù)自動(dòng)確定數(shù)組的長(zhǎng)度。4.1 數(shù)組64.1.1 一維數(shù)組3.一維數(shù)組元素的引用對(duì)數(shù)組元素的訪問(wèn)方法是通過(guò)下標(biāo)運(yùn)算符,按元素在數(shù)組中的位置進(jìn)行訪問(wèn),稱為索引訪問(wèn)或下標(biāo)訪問(wèn),格式如下:4.1 數(shù)組74.1.2 二維數(shù)組及多維數(shù)組數(shù)組不僅有一維數(shù)組,還有二維、三維甚至多維數(shù)組。一維數(shù)組可用來(lái)表示向量,二維數(shù)組可用來(lái)表示行列式或矩陣,例如可以用一個(gè)二維數(shù)組來(lái)存儲(chǔ)方程組的系數(shù)矩陣。而像玩具魔方這樣的立方體結(jié)構(gòu)就需要用三維數(shù)組來(lái)表示。1.二維及多維數(shù)組定義和存儲(chǔ)方式二維及多維數(shù)組定義的語(yǔ)法格式為:

4、常量表達(dá)式1為數(shù)組第一維的長(zhǎng)度(最高維),常量表達(dá)式2為數(shù)組第二維的長(zhǎng)度,常量表達(dá)式n為數(shù)組第n維的長(zhǎng)度(最低維)。4.1 數(shù)組84.1.2 二維數(shù)組及多維數(shù)組2.二維數(shù)組的初始化對(duì)于二維數(shù)組,其初始化有以下幾種形式:(1)嵌套一維數(shù)組的初始化:int a34=1,3,5,7,2,1,6,8,3,;i,7,11;(2)按數(shù)組元素存儲(chǔ)次序列出各元素的值,并只用一個(gè)“”括起來(lái),如:int a34=1,3,5,7,2,4,6,8,3,5,7, 11 ;(3)可以對(duì)部分元素賦初值,沒(méi)有明確初值的元素為0。如:int a34=1,3,2,,3,5,7;(4)可由初始化數(shù)據(jù)個(gè)數(shù)確定數(shù)組的最高維長(zhǎng)度。如:i

5、nt a 4=1,3,5,7,2,4,6,8,3,5,7, 11 ;4.1 數(shù)組94.1.2 二維數(shù)組及多維數(shù)組3.二維及多維數(shù)組元素的引用二維及多維數(shù)組元素的引用與一維類似,其語(yǔ)法形式為: 元素下標(biāo)表達(dá)式的個(gè)數(shù)取決于數(shù)組的維數(shù),N維數(shù)組就有N個(gè)下標(biāo)表達(dá)式。二維及多維數(shù)組元素下標(biāo)的起止值、下標(biāo)表達(dá)式值的要求與一維數(shù)組完全相同。4.1 數(shù)組104.1.3 數(shù)組作為函數(shù)參數(shù)數(shù)組元素和數(shù)組名都可以作為函數(shù)的參數(shù)實(shí)現(xiàn)函數(shù)間數(shù)組數(shù)據(jù)的傳遞和共享。由于數(shù)組元素和普通變量沒(méi)有區(qū)別,因此當(dāng)數(shù)組元素作為函數(shù)的實(shí)參時(shí),傳遞給形參的是數(shù)組元素的值。使用數(shù)組名作為函數(shù)的參數(shù),則實(shí)參和形參都應(yīng)該是數(shù)組名,且類型應(yīng)相同。

6、由于數(shù)組名表示的是數(shù)組首元素的地址,所以函數(shù)形參得到的是實(shí)參數(shù)組首元素的地址,實(shí)參和形參地址值相同,因此被調(diào)函數(shù)中對(duì)形參數(shù)組的處理實(shí)際上就是對(duì)主調(diào)函數(shù)的實(shí)參數(shù)組的處理。4.1 數(shù)組114.1.3 數(shù)組作為函數(shù)參數(shù)1.一維數(shù)組作為函數(shù)參數(shù)4.1 數(shù)組124.1.3 數(shù)組作為函數(shù)參數(shù)2.多維數(shù)組作為函數(shù)參數(shù)多維數(shù)組也可以作為函數(shù)參數(shù)。多維數(shù)組作為參數(shù),最高維長(zhǎng)度可以不寫(xiě),但其他各維必須明確標(biāo)出。因?yàn)榫幾g器只要根據(jù)后面每一維(從第2維開(kāi)始)的大小就可計(jì)算數(shù)組占用空間中每一個(gè)元素的存儲(chǔ)地址。對(duì)于多維數(shù)組,編譯器不檢查邊界,其實(shí)只是不檢查最高維(第1維)的邊界。4.1 數(shù)組134.1.4 數(shù)組的應(yīng)用 數(shù)

7、據(jù)排序是最常見(jiàn)的應(yīng)用,比如對(duì)學(xué)生考試成績(jī)進(jìn)行排序,對(duì)候選人得票數(shù)排序等。排序的方法有很多種,常用的有:冒泡法選擇法插入法4.2 指針144.2.1 指針的概念指針是一種數(shù)據(jù)類型,指針類型的變量稱為指針變量。 對(duì)變量的訪問(wèn)也就是對(duì)變量的存取有兩種方式:1.直接訪問(wèn) 程序中按變量名訪問(wèn)變量的方式是直接訪問(wèn)。程序編譯后,變量名和變量地址之間就建立了對(duì)應(yīng)關(guān)系。程序中訪問(wèn)變量,根據(jù)對(duì)應(yīng)關(guān)系,尋找到該地址,獲得該變量的值。2.間接訪問(wèn) 變量的地址也可以放在另一個(gè)變量中,則存放該地址的變量稱為指針變量。訪問(wèn)數(shù)據(jù)變量時(shí),先由指針變量獲得該數(shù)據(jù)變量的地址,再由數(shù)據(jù)變量地址實(shí)現(xiàn)對(duì)數(shù)據(jù)變量的存取,這稱為“間接訪問(wèn)”

8、。由于指針變量的值是另一個(gè)變量的地址,習(xí)慣上形象地稱指針變量指向該變量。指針變量也簡(jiǎn)稱為指針。4.2 指針154.2.2 指針變量的定義指針變量的定義格式如下:4.2 指針164.2.3 指針變量的初始化和運(yùn)算3.指針的算術(shù)運(yùn)算由于指針變量存放的都是內(nèi)存地址,所以指針的算術(shù)運(yùn)算都是整數(shù)運(yùn)算。一個(gè)指針變量可以加上或減去一個(gè)整數(shù)值,包括指針的+、-運(yùn)算。根據(jù)C+地址運(yùn)算規(guī)則,一個(gè)指針變量加(減)一個(gè)整數(shù)并不是簡(jiǎn)單地將其地址量加(減)一個(gè)整數(shù),而是根據(jù)其所指的數(shù)據(jù)類型的長(zhǎng)度,計(jì)算出指針最后指向的位置。例如,p+n實(shí)際表示的地址是:p指向的內(nèi)存單元的地址+n*sizeof(指針指向的數(shù)據(jù)類型)4.2

9、指針174.2.3 指針變量的初始化和運(yùn)算4.指針的關(guān)系運(yùn)算指針可以進(jìn)行關(guān)系運(yùn)算。當(dāng)兩個(gè)指向相同類型數(shù)據(jù)的指針相等時(shí),就說(shuō)明它們指向同一個(gè)內(nèi)存單元。在程序中經(jīng)常對(duì)指向同一個(gè)數(shù)組的兩個(gè)指針進(jìn)行小于、等于等各種關(guān)系運(yùn)算。和指針相減情況相同,兩個(gè)指向同類型普通變量的指針進(jìn)行關(guān)系運(yùn)算也沒(méi)有任何意義。一個(gè)指針可以和NULL作相等或不等的關(guān)系運(yùn)算,用來(lái)判斷該指針是否為空。4.2 指針184.2.4 指針作為函數(shù)參數(shù)指針作為函數(shù)的形參,在調(diào)用時(shí)實(shí)參將地址值傳遞給形參,使形參指針指向主調(diào)函數(shù)中的數(shù)據(jù)。這樣在被調(diào)函數(shù)中,通過(guò)形參指針對(duì)數(shù)據(jù)的訪問(wèn)就是對(duì)主調(diào)函數(shù)中的數(shù)據(jù)進(jìn)行訪問(wèn)。4.2 指針194.2.5 指針數(shù)組

10、如果數(shù)組的每個(gè)元素都是指針變量,稱該數(shù)組為指針數(shù)組。定義一維指針數(shù)組的語(yǔ)法格式為:常量表達(dá)式同樣指出數(shù)組元素的個(gè)數(shù),數(shù)據(jù)類型確定數(shù)組中每個(gè)元素的類型,即指針類型。4.2 指針204.2.6 指針型函數(shù)和函數(shù)指針1.指針型函數(shù)定義指針型函數(shù)的語(yǔ)法形式是:數(shù)據(jù)類型 *函數(shù)名(參數(shù)表) 函數(shù)體函數(shù)名前面的“*”表示該函數(shù)是一個(gè)指針型函數(shù),數(shù)據(jù)類型表明函數(shù)返回指針的類型。4.2 指針214.2.6 指針型函數(shù)和函數(shù)指針2.函數(shù)指針在程序運(yùn)行時(shí),不僅數(shù)據(jù)要占據(jù)內(nèi)存空間,程序的代碼被調(diào)入內(nèi)存后也占據(jù)一定的空間。每一個(gè)函數(shù)都有函數(shù)名,C+規(guī)定這個(gè)函數(shù)名就表示函數(shù)代碼在內(nèi)存中的起始地址。由此看來(lái),調(diào)用函數(shù)的形

11、式“函數(shù)名(參數(shù)表)”的實(shí)質(zhì)就是“函數(shù)代碼首地址(參數(shù)表)”。指向函數(shù)的指針,簡(jiǎn)稱函數(shù)指針,是用來(lái)存放函數(shù)代碼首地址的指針型變量。4.2 指針224.2.6 指針型函數(shù)和函數(shù)指針函數(shù)指針名前的圓括號(hào)是必需的。圓括號(hào)改變了運(yùn)算符的優(yōu)先級(jí),使得該標(biāo)識(shí)符首先被解釋為指針。函數(shù)指針在使用之前也要進(jìn)行賦值,使指針指向一個(gè)已經(jīng)存在的函數(shù)代碼的起始地址。語(yǔ)法為:使用函數(shù)指針調(diào)用函數(shù)有以下兩種語(yǔ)法形式:4.2 指針234.2.7 用typedef簡(jiǎn)化指針C+中是用關(guān)鍵字typedef定義一個(gè)標(biāo)識(shí)符來(lái)代表一種數(shù)據(jù)類型,它的主要用途是簡(jiǎn)化復(fù)雜的類型說(shuō)明,改進(jìn)程序的可讀性。typedef定義類型的語(yǔ)法格式為:4.3

12、 指針與數(shù)組的關(guān)系24在C+中,指針和數(shù)組的關(guān)系十分密切。數(shù)組名代表數(shù)組在內(nèi)存中的首地址。圖4-10中,數(shù)組名f在表達(dá)式中被自動(dòng)轉(zhuǎn)換為一個(gè)指向數(shù)組首元素的指針常量。同樣通過(guò)指針也可以訪問(wèn)數(shù)組中的元素。這樣數(shù)組名可以用指針來(lái)代替,而且非常方便。4.3 指針與數(shù)組的關(guān)系254.3.1 指針與一維數(shù)組從前面的介紹中已知,數(shù)組名表示數(shù)組首元素的地址。如定義:int f10,則f是數(shù)組名,也是數(shù)組首元素f0的地址,因此有以下等值關(guān)系:4.3 指針與數(shù)組的關(guān)系264.3.2 指針與二維數(shù)組使用指針可以指向一維數(shù)組中的元素,也可以指向多維數(shù)組中的元素。但是在概念和使用上要比一維數(shù)組復(fù)雜得多。1.二維數(shù)組中元

13、素的地址在C+中,對(duì)多維數(shù)組是一種嵌套定義,將二維及多維數(shù)組看成是“數(shù)組的數(shù)組”。例如,二維整型數(shù)組mat的定義為:4.3 指針與數(shù)組的關(guān)系274.3.2 指針與二維數(shù)組4.3 指針與數(shù)組的關(guān)系284.3.2 指針與二維數(shù)組4.3 指針與數(shù)組的關(guān)系294.3.2 指針與二維數(shù)組2.指向一維數(shù)組的指針從上面的討論中可以知道,二維數(shù)組名mat是其首元素mat0的地址,該地址的類型不是int*,而應(yīng)該是一個(gè)由6個(gè)int類型變量組成的一維數(shù)組的地址,即和int(*)6類型的指針等價(jià)。因此要定義一個(gè)指針指向mat,可以如下定義:p是一個(gè)指向由6個(gè)int類型變量組成的一維數(shù)組的指針,并指向mat的第一行m

14、at0。稱p為數(shù)組指針。推而廣之,定義二維數(shù)組的指針變量的語(yǔ)法格式為:4.4 字符串304.4.1 C風(fēng)格字符串1.字符串與字符數(shù)組C+中的字符數(shù)組可用來(lái)處理字符串,因此也允許直接用字符串常量對(duì)字符數(shù)組進(jìn)行初始化。如果數(shù)組定義的長(zhǎng)度大于初始化字符串的長(zhǎng)度,多出的字符均為0。2.字符指針與字符串用指針處理字符串更方便,更靈活。例如,有如下說(shuō)明語(yǔ)句: char*pstr=C+isaobject_orientedlanguage ;4.4 字符串314.4.1 C風(fēng)格字符串3.字符串處理函數(shù)C+中對(duì)C風(fēng)格的字符串沒(méi)有提供進(jìn)行賦值、合并、比較的運(yùn)算符,但提供了許多字符串處理函數(shù)。使用這些函數(shù)時(shí)要包含頭

15、文件cstring。下面討論幾個(gè)最常用的字符串處理函數(shù)。(1)字符串復(fù)制函數(shù) char * strcpy(char *t , constchar *s)(2)串連接函數(shù)char * strcat(chart , constchar *s)(3)字符串比較函數(shù)intstrcmp(constchar *s1, constchar *s2)(4)字符串長(zhǎng)度函數(shù)intstrlen(constchar *s)4.4 字符串324.4.2 C+string類下面介紹string類型的常用方法。(1)定義string類型的對(duì)象。 stringstr; /建立空字符串str stringstr(“OK”);

16、/建立字符串str,并用C風(fēng)格字符串初始化 stringstr1(str); /建立字符串str1,并用str初始化4.4 字符串334.4.2 C+string類下面介紹string類型的常用方法。(2)訪問(wèn)string對(duì)象字符。 stri; /訪問(wèn)str索引i的字符,不檢查是否出界 str.at(i); /訪問(wèn)str索引i的字符,檢查是否出界4.4 字符串344.4.2 C+string類下面介紹string類型的常用方法。(3)string類型的=、+及關(guān)系等運(yùn)算。與C風(fēng)格字符串不同,進(jìn)行這些運(yùn)算時(shí),不必考慮目標(biāo)串的長(zhǎng)短,需要時(shí)系統(tǒng)會(huì)自動(dòng)為目標(biāo)串分配所需空間。str1=str2; /st

17、r2賦給str1str1+=str2; /str1和str2字符串首尾連接str1+str2; /返回一個(gè)字符串,它將str2的字符數(shù)據(jù)連接到str1的尾部str1=str2;str1!=str2; /基于字典序比較的關(guān)系運(yùn)算,返回布爾值(4)string類型字符串的輸入/輸出。string類型輸入/輸出與C風(fēng)格字符串同樣方便,輸出使用cout和插入運(yùn)算符“”。4.4 字符串354.4.2 C+string類(5)string類型提供了一些常用的函數(shù),以方便字符串處理。str.substr(pos,len); /返回str從pos位置起,長(zhǎng)為len個(gè)字符的字串str.empty(); /檢查s

18、tr是否為空字符串str.insert(pos,str2); /將str2插入str的pos位置處str.remove(pos,len); /從str位置pos處起,刪除長(zhǎng)度為len的子串str.find(str1); /返回str1首次在str中出現(xiàn)時(shí)的索引str.find(str1,pos); /返回str1首次在str中出現(xiàn)時(shí)的索引,從位置pos處起尋找str.length(); /返回str串長(zhǎng)度str.append(str1); /和str+=str1等價(jià)str.assign(str1); /和str=str1等價(jià)pare(str1); /和str1比較,根據(jù)比較結(jié)果,返回1、0、-1str.swap(str1); /和str1交換4.5 動(dòng)態(tài)內(nèi)存分配36C+提供了這樣一種存儲(chǔ)空間分配技術(shù),能夠在程序運(yùn)行時(shí),根據(jù)實(shí)際需求,申請(qǐng)適量的內(nèi)存空間。當(dāng)不再使用該內(nèi)存空間,再返還給操作系統(tǒng)。這種技術(shù)稱為動(dòng)態(tài)分配內(nèi)存。動(dòng)態(tài)內(nèi)存所占用空間在自由存儲(chǔ)區(qū)(也稱堆區(qū))。在C+中,申請(qǐng)和釋放自由存儲(chǔ)區(qū)中空間,分別使用new和delete這兩個(gè)運(yùn)算符來(lái)完成,使用的格式如下:4.5 動(dòng)態(tài)內(nèi)存分配374.4.2

溫馨提示

  • 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)論