




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、C+程序設計新世紀應用型高等教育教材編審委員會 組編主編 羅燁 李秉璋第二版新世紀應用型高等教育軟件專業(yè)系列規(guī)劃教材第4章 數(shù)組、指針及字符串4.1 數(shù)組3數(shù)組是同類型數(shù)據(jù)的有序集合。它由若干個元素組成,每個元素數(shù)據(jù)類型都相同,在內存中占用相同大小的存儲單元。各元素具有明確的次序關系,且在內存中連續(xù)存放。數(shù)組中的每一個元素都用數(shù)組名與若干個帶方括號的下標表示。下標的個數(shù)表示數(shù)組的維數(shù),數(shù)組可以是一維的,也可以是多維的。數(shù)組的維數(shù)和每一維的元素個數(shù)必須在定義數(shù)組時確定,在程序運行時不能改變。4.1 數(shù)組44.1.1 一維數(shù)組1.一維數(shù)組的定義和存儲方式數(shù)組在使用前也必須先定義。語法格式為:其中:
2、(1)數(shù)組元素的類型可以是void以外的任何類型。(2)數(shù)組名是用戶自定義的標識符。在C+中數(shù)組名表示數(shù)組首元素在內存中的地址,它是一個地址常量,因此數(shù)組名不能修改,不能作為左值出現(xiàn)。(3)常量表達式的值必須是unsignedint類型的正整數(shù)或常變量,不能是變量。該值表示數(shù)組的大小,亦稱數(shù)組的長度,表示數(shù)組元素的個數(shù)。(4)是數(shù)組下標運算符,但是在數(shù)組定義時用來規(guī)定數(shù)組的長度。4.1 數(shù)組54.1.1 一維數(shù)組2.一維數(shù)組的初始化與定義普通變量時可以同時初始化一樣,定義一個數(shù)組時也可進行初始化。例如: intf10=0,1,1,2,3,5,8,13,21,34;以上f數(shù)組已對全部數(shù)組元素初始
3、化,也可以省略數(shù)組的長度,即:intf=0,l,1,2,3,5,8,13,21,34;編譯器會根據(jù)初始化值的個數(shù)自動確定數(shù)組的長度。4.1 數(shù)組64.1.1 一維數(shù)組3.一維數(shù)組元素的引用對數(shù)組元素的訪問方法是通過下標運算符,按元素在數(shù)組中的位置進行訪問,稱為索引訪問或下標訪問,格式如下:4.1 數(shù)組74.1.2 二維數(shù)組及多維數(shù)組數(shù)組不僅有一維數(shù)組,還有二維、三維甚至多維數(shù)組。一維數(shù)組可用來表示向量,二維數(shù)組可用來表示行列式或矩陣,例如可以用一個二維數(shù)組來存儲方程組的系數(shù)矩陣。而像玩具魔方這樣的立方體結構就需要用三維數(shù)組來表示。1.二維及多維數(shù)組定義和存儲方式二維及多維數(shù)組定義的語法格式為:
4、常量表達式1為數(shù)組第一維的長度(最高維),常量表達式2為數(shù)組第二維的長度,常量表達式n為數(shù)組第n維的長度(最低維)。4.1 數(shù)組84.1.2 二維數(shù)組及多維數(shù)組2.二維數(shù)組的初始化對于二維數(shù)組,其初始化有以下幾種形式:(1)嵌套一維數(shù)組的初始化:int a34=1,3,5,7,2,1,6,8,3,;i,7,11;(2)按數(shù)組元素存儲次序列出各元素的值,并只用一個“”括起來,如:int a34=1,3,5,7,2,4,6,8,3,5,7, 11 ;(3)可以對部分元素賦初值,沒有明確初值的元素為0。如:int a34=1,3,2,,3,5,7;(4)可由初始化數(shù)據(jù)個數(shù)確定數(shù)組的最高維長度。如: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ù)組元素的引用與一維類似,其語法形式為: 元素下標表達式的個數(shù)取決于數(shù)組的維數(shù),N維數(shù)組就有N個下標表達式。二維及多維數(shù)組元素下標的起止值、下標表達式值的要求與一維數(shù)組完全相同。4.1 數(shù)組104.1.3 數(shù)組作為函數(shù)參數(shù)數(shù)組元素和數(shù)組名都可以作為函數(shù)的參數(shù)實現(xiàn)函數(shù)間數(shù)組數(shù)據(jù)的傳遞和共享。由于數(shù)組元素和普通變量沒有區(qū)別,因此當數(shù)組元素作為函數(shù)的實參時,傳遞給形參的是數(shù)組元素的值。使用數(shù)組名作為函數(shù)的參數(shù),則實參和形參都應該是數(shù)組名,且類型應相同。
6、由于數(shù)組名表示的是數(shù)組首元素的地址,所以函數(shù)形參得到的是實參數(shù)組首元素的地址,實參和形參地址值相同,因此被調函數(shù)中對形參數(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ù),最高維長度可以不寫,但其他各維必須明確標出。因為編譯器只要根據(jù)后面每一維(從第2維開始)的大小就可計算數(shù)組占用空間中每一個元素的存儲地址。對于多維數(shù)組,編譯器不檢查邊界,其實只是不檢查最高維(第1維)的邊界。4.1 數(shù)組134.1.4 數(shù)組的應用 數(shù)
7、據(jù)排序是最常見的應用,比如對學生考試成績進行排序,對候選人得票數(shù)排序等。排序的方法有很多種,常用的有:冒泡法選擇法插入法4.2 指針144.2.1 指針的概念指針是一種數(shù)據(jù)類型,指針類型的變量稱為指針變量。 對變量的訪問也就是對變量的存取有兩種方式:1.直接訪問 程序中按變量名訪問變量的方式是直接訪問。程序編譯后,變量名和變量地址之間就建立了對應關系。程序中訪問變量,根據(jù)對應關系,尋找到該地址,獲得該變量的值。2.間接訪問 變量的地址也可以放在另一個變量中,則存放該地址的變量稱為指針變量。訪問數(shù)據(jù)變量時,先由指針變量獲得該數(shù)據(jù)變量的地址,再由數(shù)據(jù)變量地址實現(xiàn)對數(shù)據(jù)變量的存取,這稱為“間接訪問”
8、。由于指針變量的值是另一個變量的地址,習慣上形象地稱指針變量指向該變量。指針變量也簡稱為指針。4.2 指針154.2.2 指針變量的定義指針變量的定義格式如下:4.2 指針164.2.3 指針變量的初始化和運算3.指針的算術運算由于指針變量存放的都是內存地址,所以指針的算術運算都是整數(shù)運算。一個指針變量可以加上或減去一個整數(shù)值,包括指針的+、-運算。根據(jù)C+地址運算規(guī)則,一個指針變量加(減)一個整數(shù)并不是簡單地將其地址量加(減)一個整數(shù),而是根據(jù)其所指的數(shù)據(jù)類型的長度,計算出指針最后指向的位置。例如,p+n實際表示的地址是:p指向的內存單元的地址+n*sizeof(指針指向的數(shù)據(jù)類型)4.2
9、指針174.2.3 指針變量的初始化和運算4.指針的關系運算指針可以進行關系運算。當兩個指向相同類型數(shù)據(jù)的指針相等時,就說明它們指向同一個內存單元。在程序中經(jīng)常對指向同一個數(shù)組的兩個指針進行小于、等于等各種關系運算。和指針相減情況相同,兩個指向同類型普通變量的指針進行關系運算也沒有任何意義。一個指針可以和NULL作相等或不等的關系運算,用來判斷該指針是否為空。4.2 指針184.2.4 指針作為函數(shù)參數(shù)指針作為函數(shù)的形參,在調用時實參將地址值傳遞給形參,使形參指針指向主調函數(shù)中的數(shù)據(jù)。這樣在被調函數(shù)中,通過形參指針對數(shù)據(jù)的訪問就是對主調函數(shù)中的數(shù)據(jù)進行訪問。4.2 指針194.2.5 指針數(shù)組
10、如果數(shù)組的每個元素都是指針變量,稱該數(shù)組為指針數(shù)組。定義一維指針數(shù)組的語法格式為:常量表達式同樣指出數(shù)組元素的個數(shù),數(shù)據(jù)類型確定數(shù)組中每個元素的類型,即指針類型。4.2 指針204.2.6 指針型函數(shù)和函數(shù)指針1.指針型函數(shù)定義指針型函數(shù)的語法形式是:數(shù)據(jù)類型 *函數(shù)名(參數(shù)表) 函數(shù)體函數(shù)名前面的“*”表示該函數(shù)是一個指針型函數(shù),數(shù)據(jù)類型表明函數(shù)返回指針的類型。4.2 指針214.2.6 指針型函數(shù)和函數(shù)指針2.函數(shù)指針在程序運行時,不僅數(shù)據(jù)要占據(jù)內存空間,程序的代碼被調入內存后也占據(jù)一定的空間。每一個函數(shù)都有函數(shù)名,C+規(guī)定這個函數(shù)名就表示函數(shù)代碼在內存中的起始地址。由此看來,調用函數(shù)的形
11、式“函數(shù)名(參數(shù)表)”的實質就是“函數(shù)代碼首地址(參數(shù)表)”。指向函數(shù)的指針,簡稱函數(shù)指針,是用來存放函數(shù)代碼首地址的指針型變量。4.2 指針224.2.6 指針型函數(shù)和函數(shù)指針函數(shù)指針名前的圓括號是必需的。圓括號改變了運算符的優(yōu)先級,使得該標識符首先被解釋為指針。函數(shù)指針在使用之前也要進行賦值,使指針指向一個已經(jīng)存在的函數(shù)代碼的起始地址。語法為:使用函數(shù)指針調用函數(shù)有以下兩種語法形式:4.2 指針234.2.7 用typedef簡化指針C+中是用關鍵字typedef定義一個標識符來代表一種數(shù)據(jù)類型,它的主要用途是簡化復雜的類型說明,改進程序的可讀性。typedef定義類型的語法格式為:4.3
12、 指針與數(shù)組的關系24在C+中,指針和數(shù)組的關系十分密切。數(shù)組名代表數(shù)組在內存中的首地址。圖4-10中,數(shù)組名f在表達式中被自動轉換為一個指向數(shù)組首元素的指針常量。同樣通過指針也可以訪問數(shù)組中的元素。這樣數(shù)組名可以用指針來代替,而且非常方便。4.3 指針與數(shù)組的關系254.3.1 指針與一維數(shù)組從前面的介紹中已知,數(shù)組名表示數(shù)組首元素的地址。如定義:int f10,則f是數(shù)組名,也是數(shù)組首元素f0的地址,因此有以下等值關系:4.3 指針與數(shù)組的關系264.3.2 指針與二維數(shù)組使用指針可以指向一維數(shù)組中的元素,也可以指向多維數(shù)組中的元素。但是在概念和使用上要比一維數(shù)組復雜得多。1.二維數(shù)組中元
13、素的地址在C+中,對多維數(shù)組是一種嵌套定義,將二維及多維數(shù)組看成是“數(shù)組的數(shù)組”。例如,二維整型數(shù)組mat的定義為:4.3 指針與數(shù)組的關系274.3.2 指針與二維數(shù)組4.3 指針與數(shù)組的關系284.3.2 指針與二維數(shù)組4.3 指針與數(shù)組的關系294.3.2 指針與二維數(shù)組2.指向一維數(shù)組的指針從上面的討論中可以知道,二維數(shù)組名mat是其首元素mat0的地址,該地址的類型不是int*,而應該是一個由6個int類型變量組成的一維數(shù)組的地址,即和int(*)6類型的指針等價。因此要定義一個指針指向mat,可以如下定義:p是一個指向由6個int類型變量組成的一維數(shù)組的指針,并指向mat的第一行m
14、at0。稱p為數(shù)組指針。推而廣之,定義二維數(shù)組的指針變量的語法格式為:4.4 字符串304.4.1 C風格字符串1.字符串與字符數(shù)組C+中的字符數(shù)組可用來處理字符串,因此也允許直接用字符串常量對字符數(shù)組進行初始化。如果數(shù)組定義的長度大于初始化字符串的長度,多出的字符均為0。2.字符指針與字符串用指針處理字符串更方便,更靈活。例如,有如下說明語句: char*pstr=C+isaobject_orientedlanguage ;4.4 字符串314.4.1 C風格字符串3.字符串處理函數(shù)C+中對C風格的字符串沒有提供進行賦值、合并、比較的運算符,但提供了許多字符串處理函數(shù)。使用這些函數(shù)時要包含頭
15、文件cstring。下面討論幾個最常用的字符串處理函數(shù)。(1)字符串復制函數(shù) char * strcpy(char *t , constchar *s)(2)串連接函數(shù)char * strcat(chart , constchar *s)(3)字符串比較函數(shù)intstrcmp(constchar *s1, constchar *s2)(4)字符串長度函數(shù)intstrlen(constchar *s)4.4 字符串324.4.2 C+string類下面介紹string類型的常用方法。(1)定義string類型的對象。 stringstr; /建立空字符串str stringstr(“OK”);
16、/建立字符串str,并用C風格字符串初始化 stringstr1(str); /建立字符串str1,并用str初始化4.4 字符串334.4.2 C+string類下面介紹string類型的常用方法。(2)訪問string對象字符。 stri; /訪問str索引i的字符,不檢查是否出界 str.at(i); /訪問str索引i的字符,檢查是否出界4.4 字符串344.4.2 C+string類下面介紹string類型的常用方法。(3)string類型的=、+及關系等運算。與C風格字符串不同,進行這些運算時,不必考慮目標串的長短,需要時系統(tǒng)會自動為目標串分配所需空間。str1=str2; /st
17、r2賦給str1str1+=str2; /str1和str2字符串首尾連接str1+str2; /返回一個字符串,它將str2的字符數(shù)據(jù)連接到str1的尾部str1=str2;str1!=str2; /基于字典序比較的關系運算,返回布爾值(4)string類型字符串的輸入/輸出。string類型輸入/輸出與C風格字符串同樣方便,輸出使用cout和插入運算符“”。4.4 字符串354.4.2 C+string類(5)string類型提供了一些常用的函數(shù),以方便字符串處理。str.substr(pos,len); /返回str從pos位置起,長為len個字符的字串str.empty(); /檢查s
18、tr是否為空字符串str.insert(pos,str2); /將str2插入str的pos位置處str.remove(pos,len); /從str位置pos處起,刪除長度為len的子串str.find(str1); /返回str1首次在str中出現(xiàn)時的索引str.find(str1,pos); /返回str1首次在str中出現(xiàn)時的索引,從位置pos處起尋找str.length(); /返回str串長度str.append(str1); /和str+=str1等價str.assign(str1); /和str=str1等價pare(str1); /和str1比較,根據(jù)比較結果,返回1、0、-1str.swap(str1); /和str1交換4.5 動態(tài)內存分配36C+提供了這樣一種存儲空間分配技術,能夠在程序運行時,根據(jù)實際需求,申請適量的內存空間。當不再使用該內存空間,再返還給操作系統(tǒng)。這種技術稱為動態(tài)分配內存。動態(tài)內存所占用空間在自由存儲區(qū)(也稱堆區(qū))。在C+中,申請和釋放自由存儲區(qū)中空間,分別使用new和delete這兩個運算符來完成,使用的格式如下:4.5 動態(tài)內存分配374.4.2
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 借款 民間借貸 合同范本
- 任意健身合同范本
- 醫(yī)院吊頂合同范本
- 醫(yī)師合同范本
- 獸醫(yī)聘用勞動合同范本
- 關于按揭車合同范本
- 個人租賃司機合同范本
- 出口業(yè)務合同范本
- 免租期補充合同范本
- 買賣小區(qū)用地合同范本
- 個人保證無糾紛承諾保證書
- DB51T10009-2024DB50T10009-2024康養(yǎng)度假氣候類型劃分
- 華文版六年級下冊書法教案
- 生產(chǎn)安全重大事故隱患檢查表(根據(jù)住建部房屋市政工程生產(chǎn)安全重大事故隱患判定標準(2022版)編制)
- 期末模擬測試卷(試卷)2024-2025學年六年級數(shù)學上冊人教版
- 2024屆護士資格考試必考基礎知識復習題庫及答案(共170題)
- 小學生防性侵安全教育主題班會課件
- 幸福心理學智慧樹知到答案2024年浙江大學
- 人教版一年級數(shù)學下冊教案全冊(完整版下載打印)
- 2024至2030年全球及中國消費電子磁阻隨機存取存儲器(MRAM)行業(yè)深度研究報告
- 云南省2023年秋季學期期末普通高中學業(yè)水平考試信息技術(含答案解析)
評論
0/150
提交評論