




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、面向?qū)ο蟪绦蛟O(shè)計(jì)(一)呂俊白第四章數(shù)據(jù)類型第四章數(shù)據(jù)類型主要內(nèi)容:主要內(nèi)容:數(shù)組數(shù)組指針指針引用引用C串與串與string向量向量結(jié)構(gòu)結(jié)構(gòu)4.1 數(shù)組數(shù)組(P:83)主要內(nèi)容:主要內(nèi)容:數(shù)組的概念;數(shù)組的概念;數(shù)組的定義和數(shù)組元素的引用;數(shù)組的定義和數(shù)組元素的引用;一維數(shù)組和多維數(shù)組;一維數(shù)組和多維數(shù)組;字符串與字符數(shù)組;字符串與字符數(shù)組;重點(diǎn):重點(diǎn):數(shù)組定義;數(shù)組定義;數(shù)組的應(yīng)用;數(shù)組的應(yīng)用; 4.1.1定義數(shù)組定義數(shù)組 1基本概念基本概念例例1:輸入:輸入50個數(shù),要求程序按輸入時的逆序把這個數(shù),要求程序按輸入時的逆序把這50個個數(shù)打印出來。數(shù)打印出來。首先要開辟首先要開辟50個簡單變量個
2、簡單變量a0,a1,a2,a3,a49來存來存放這放這50個不同的數(shù),并讀入它們的值,后再按逆序打印。個不同的數(shù),并讀入它們的值,后再按逆序打印。其中讀入操作如下:其中讀入操作如下:cina0a1a2a3a4;cina45a46a47a48a49;/繁瑣繁瑣 采用數(shù)組:采用數(shù)組:int a50;for(int i=0;iai;例例2:輸入:輸入100個學(xué)生某門課程的成績,要個學(xué)生某門課程的成績,要求按成績從高到低的順序排列并輸出。求按成績從高到低的順序排列并輸出。這個問題同樣可以采用數(shù)組來存儲數(shù)據(jù)。這個問題同樣可以采用數(shù)組來存儲數(shù)據(jù)。(1)什么是數(shù)組)什么是數(shù)組n所謂數(shù)組就是一組所謂數(shù)組就是一
3、組相同類型相同類型變量組成的集合。變量組成的集合。n數(shù)組的元素?cái)?shù)組的元素:組成數(shù)組的:組成數(shù)組的n個相同類型的個相同類型的變量變量,就稱為該數(shù)組的元素。就稱為該數(shù)組的元素。數(shù)組元素用數(shù)組名后跟帶方括號的下標(biāo)表示數(shù)組元素用數(shù)組名后跟帶方括號的下標(biāo)表示。例如:例如:a0表示表示a數(shù)組的第一個元素,數(shù)組的第一個元素,ai表示表示a數(shù)組的第數(shù)組的第i+1個元素。個元素。從例從例1可見:下標(biāo)是可以變動,可以計(jì)算的??梢姡合聵?biāo)是可以變動,可以計(jì)算的。(2)數(shù)組的維數(shù)數(shù)組的維數(shù)n數(shù)組的維數(shù)數(shù)組的維數(shù)由數(shù)組所帶下標(biāo)說明的個數(shù)決定。由數(shù)組所帶下標(biāo)說明的個數(shù)決定。n每個元素有個下標(biāo)的數(shù)組稱為每個元素有個下標(biāo)的數(shù)組
4、稱為維數(shù)組維數(shù)組。nC+中,數(shù)組可以是一維的,也可以是多維的。中,數(shù)組可以是一維的,也可以是多維的。若每個元素都只有一個下標(biāo)則稱之為一維數(shù)組;若每個元素都只有一個下標(biāo)則稱之為一維數(shù)組;若每個元素都有兩個下標(biāo)則稱之為二維數(shù)組。若每個元素都有兩個下標(biāo)則稱之為二維數(shù)組。2數(shù)組的定義數(shù)組的定義n數(shù)組必須先定義,然后才可以使用。數(shù)組必須先定義,然后才可以使用。(1)一維數(shù)組的定義語法:)一維數(shù)組的定義語法:;說明:說明: 類型標(biāo)識符:用來指明類型標(biāo)識符:用來指明數(shù)組元素的數(shù)據(jù)類型數(shù)組元素的數(shù)據(jù)類型??梢允腔緮?shù)據(jù)類型,也可以是非基本數(shù)據(jù)類型??梢允腔緮?shù)據(jù)類型,也可以是非基本數(shù)據(jù)類型。數(shù)組名:用來標(biāo)識數(shù)
5、組,與變量的命名規(guī)則相同。數(shù)組名:用來標(biāo)識數(shù)組,與變量的命名規(guī)則相同。下標(biāo)說明:說明數(shù)組包含的元素個數(shù),即數(shù)組長度。下標(biāo)說明:說明數(shù)組包含的元素個數(shù),即數(shù)組長度。下標(biāo)說明必須是常量表達(dá)式。下標(biāo)說明必須是常量表達(dá)式。常量表達(dá)式可以包含枚舉常量和字符常量,常量表達(dá)常量表達(dá)式可以包含枚舉常量和字符常量,常量表達(dá)式的值是在編譯時確定的。式的值是在編譯時確定的。例如:例如:int a50;/ a是整型數(shù)組,有是整型數(shù)組,有50個整型元素個整型元素float b100; /b是浮點(diǎn)型數(shù)組,有是浮點(diǎn)型數(shù)組,有100個浮點(diǎn)型元素個浮點(diǎn)型元素char name5; /name是字符數(shù)組,有是字符數(shù)組,有5個字符
6、型元素個字符型元素int arre; /arr是個整型數(shù)組,有是個整型數(shù)組,有101個整型元素個整型元素, /因?yàn)樽址驗(yàn)樽址鹐的的ASCII碼為碼為101const int n=100;int an;/正確!正確!int n=100;int an; /錯誤錯誤!/因?yàn)橐驗(yàn)橄聵?biāo)說明不是常量表達(dá)式下標(biāo)說明不是常量表達(dá)式(2)一維數(shù)組的存儲表示)一維數(shù)組的存儲表示n一個數(shù)組定義是具有確定含義的操作,一個數(shù)組定義是具有確定含義的操作,它分配固定大小的空間。它分配固定大小的空間。例如:例如:char name5;字符數(shù)組字符數(shù)組namename的內(nèi)存排列示意圖:的內(nèi)存排列示意圖: 結(jié)論:結(jié)論:n數(shù)組元
7、素在內(nèi)存中是順序、連續(xù)存儲的數(shù)組元素在內(nèi)存中是順序、連續(xù)存儲的(即:(即:在內(nèi)存中占據(jù)一組連續(xù)的存儲單元),在內(nèi)存中占據(jù)一組連續(xù)的存儲單元),邏輯上邏輯上相鄰的元素在物理地址上也是相鄰的。數(shù)組名相鄰的元素在物理地址上也是相鄰的。數(shù)組名是數(shù)組首元素的內(nèi)存首地址,下標(biāo)是數(shù)組元素是數(shù)組首元素的內(nèi)存首地址,下標(biāo)是數(shù)組元素到數(shù)組開始的偏移量。到數(shù)組開始的偏移量。n第一個元素的偏移量是第一個元素的偏移量是0,第二個元素的偏移,第二個元素的偏移量是量是1,依次類推。,依次類推。注意:注意: (1)數(shù)組下標(biāo)從數(shù)組下標(biāo)從0開始。開始。 (2)在編譯時,數(shù)組定義中的下標(biāo)必須確定。在編譯時,數(shù)組定義中的下標(biāo)必須確定
8、。4.1.2數(shù)組元素的引用數(shù)組元素的引用1.一維數(shù)組元素的引用格式:一維數(shù)組元素的引用格式: 說明:說明:下標(biāo)表達(dá)式的值下標(biāo)表達(dá)式的值就是該元素在數(shù)組中的順就是該元素在數(shù)組中的順序號(序號(0 n-1),更確切地說),更確切地說是相對是相對于數(shù)組基地址的偏移量,即相對地址于數(shù)組基地址的偏移量,即相對地址。 注意:注意:(1)下標(biāo)表達(dá)式可以是任意合法的算術(shù)表達(dá)式下標(biāo)表達(dá)式可以是任意合法的算術(shù)表達(dá)式例如:例如: 整型常量:整型常量: a10整型變量:整型變量: ai 整型表達(dá)式(通常是算術(shù)表達(dá)式)整型表達(dá)式(通常是算術(shù)表達(dá)式): ai*j(2)下標(biāo)表達(dá)式的取值范圍是下標(biāo)表達(dá)式的取值范圍是0 (n-
9、1)。使用數(shù)組時,使用數(shù)組時,只能分別對數(shù)組的各個元素進(jìn)行只能分別對數(shù)組的各個元素進(jìn)行操作操作,且必須保證沒有超出數(shù)組邊界。,且必須保證沒有超出數(shù)組邊界。(3)數(shù)組的第一個元素其下標(biāo)值是數(shù)組的第一個元素其下標(biāo)值是0而不是而不是1。4.1.3數(shù)組的初始化數(shù)組的初始化n數(shù)組初始化數(shù)組初始化就是在定義數(shù)組的同時直接給數(shù)組元就是在定義數(shù)組的同時直接給數(shù)組元素賦初值。素賦初值。n元素不多而數(shù)據(jù)值又確定的小數(shù)組可以直接在程元素不多而數(shù)據(jù)值又確定的小數(shù)組可以直接在程序中初始化。序中初始化。例如:例如:int iArray10=1,1,2,3,5,8,13,21,34,55;/定義數(shù)組定義數(shù)組iArray ,
10、并用一組,并用一組Fibonacci數(shù)初始化。數(shù)初始化。1.一維數(shù)組初始化的一般格式:一維數(shù)組初始化的一般格式:=; 是一個包含是一個包含n個元素的初值集合,個元素的初值集合,元素之間用逗元素之間用逗號分隔號分隔,每個元素必須是常量每個元素必須是常量。可以只對數(shù)組的部分元素賦初值。可以只對數(shù)組的部分元素賦初值。注意:注意:(1)中中值的個數(shù)不能多于數(shù)組元素個數(shù)值的個數(shù)不能多于數(shù)組元素個數(shù);(2)中的值中的值不能通過跳過逗號的方式來省略不能通過跳過逗號的方式來省略;例如:例如:int array5=1,2,3,4,5,6; /too many initializersint array25=1,
11、2,3,4;/初始化值不能省略初始化值不能省略int array35=1,2,3,; /初始化值不能省略初始化值不能省略int array45=; /語法格式錯誤語法格式錯誤(3)初始化值的個數(shù)可少于數(shù)組元素個數(shù)。初始化值的個數(shù)可少于數(shù)組元素個數(shù)。只要動用了花括號,就是實(shí)施了初始化。只要動用了花括號,就是實(shí)施了初始化。對于實(shí)施初始化的數(shù)組,如果初始值個數(shù)少于數(shù)組元素的個對于實(shí)施初始化的數(shù)組,如果初始值個數(shù)少于數(shù)組元素的個數(shù),則后面的元素全為數(shù),則后面的元素全為0。默認(rèn)值默認(rèn)值對于沒有初始化的數(shù)組,分兩種情況:對于沒有初始化的數(shù)組,分兩種情況:n全局?jǐn)?shù)組和靜態(tài)數(shù)組其元素總是全被清全局?jǐn)?shù)組和靜態(tài)數(shù)
12、組其元素總是全被清0在函數(shù)外部定義的數(shù)組稱全局?jǐn)?shù)組;在函數(shù)外部定義的數(shù)組稱全局?jǐn)?shù)組;在定義數(shù)組時加上在定義數(shù)組時加上static修飾符的數(shù)組稱為靜態(tài)數(shù)組。修飾符的數(shù)組稱為靜態(tài)數(shù)組。n局部數(shù)組的值是不確定的。局部數(shù)組的值是不確定的。在函數(shù)內(nèi)部定義的數(shù)組稱為局部數(shù)組。在函數(shù)內(nèi)部定義的數(shù)組稱為局部數(shù)組。(參見參見P:85例例f0308.cpp)/ f0308.cpp 探測數(shù)組初值探測數(shù)組初值#includeusing namespace std;int array15=1,2,3; / 有初始化有初始化全局?jǐn)?shù)組全局?jǐn)?shù)組int array25; / 無初始化無初始化int main() int arr
13、ay35=2; / 有初始化有初始化局部數(shù)組局部數(shù)組 int array45; / 無初始化無初始化 int i; coutarray1: ; for(i=0; i5; +i) coutarray1i ; coutnarray2: ; for(i=0; i5; +i) coutarray2i ; coutnarray3: ; for(i=0; i5; +i) coutarray3i ; coutnarray4: ; for(i=0; i5; +i) coutarray4i ; coutn; return 1;2.字符串與字符數(shù)組字符串與字符數(shù)組(1) C字符串字符串(P:77)nC字符串(簡稱
14、字符串(簡稱C串或串或ASCIIZ串):是以串):是以一個全一個全0(整數(shù)(整數(shù)0)字節(jié)作為結(jié)束符的字符序列。)字節(jié)作為結(jié)束符的字符序列。nC串也是字符串的字面值,其格式為串也是字符串的字面值,其格式為雙引號雙引號括起來的字符序列。括起來的字符序列。例如:例如:“Hello!” 圖32“Hello!”的存儲形式的存儲形式注意:注意:每個字符占據(jù)每個字符占據(jù)1 1個字節(jié),個字節(jié),C串所占的空間長度為串所占的空間長度為字符串長度加字符串長度加1。2.字符串與字符數(shù)組字符串與字符數(shù)組(2)初始化字符數(shù)組)初始化字符數(shù)組(P:85)n初始化字符數(shù)組有初始化字符數(shù)組有兩種方法兩種方法:(1)char a
15、rray10=“hello”; /用途廣泛用途廣泛初始化時,系統(tǒng)自動在數(shù)組沒有填值的位置填上初始化時,系統(tǒng)自動在數(shù)組沒有填值的位置填上0。也也可省略可省略 表示成:表示成:char array10=“hello”; 等價等價char array10=“hello”;(2)char array10=h,e,l,l,o,0;這種方法這種方法通常用于輸入不容易在鍵盤上生成的不可見字通常用于輸入不容易在鍵盤上生成的不可見字符符(如:制表符等)。(如:制表符等)。注意:不要忘記為最后的注意:不要忘記為最后的0分配空間。分配空間。即數(shù)組實(shí)際分配的空間大小是字符串中的字符個即數(shù)組實(shí)際分配的空間大小是字符串中
16、的字符個數(shù)加上末尾的結(jié)束符數(shù)加上末尾的結(jié)束符0。3.省略數(shù)組大小省略數(shù)組大小n具有初始化的數(shù)組定義,具有初始化的數(shù)組定義,其元素個數(shù)可以省略,其元素個數(shù)可以省略,此時,元素個數(shù)的確定取決于初始化值的個數(shù)。此時,元素個數(shù)的確定取決于初始化值的個數(shù)。例如:例如:int a=2,4,6,8,10;等價等價int a5=2,4,6,8,10;此時,編譯器將統(tǒng)計(jì)此時,編譯器將統(tǒng)計(jì) 之間的元素個數(shù),求出數(shù)組的大小之間的元素個數(shù),求出數(shù)組的大小。n省略數(shù)組大小的初始化方法為程序員提供修改元省略數(shù)組大小的初始化方法為程序員提供修改元素個數(shù)的機(jī)會。素個數(shù)的機(jī)會。在沒有規(guī)定數(shù)組大小的情況下,怎么知道數(shù)組的大小呢?
17、在沒有規(guī)定數(shù)組大小的情況下,怎么知道數(shù)組的大小呢?nsizeof操作解決了這個問題。操作解決了這個問題。例如:例如:P:84/ f0307.cpp 省略數(shù)組定義中方括號內(nèi)的表達(dá)式省略數(shù)組定義中方括號內(nèi)的表達(dá)式#includeusing namespace std;int main() int a=1,2,3,4,5; for(int i=0; isizeof(a)/sizeof(int); +i) coutai ; coutendl; return 1; 注意:省略數(shù)組大小只能出現(xiàn)在有初始化的數(shù)組定義中。注意:省略數(shù)組大小只能出現(xiàn)在有初始化的數(shù)組定義中。4.1.4一維數(shù)組應(yīng)用實(shí)例一維數(shù)組應(yīng)用實(shí)
18、例實(shí)例一:排序?qū)嵗唬号判騨所謂所謂排序排序是將一組數(shù)據(jù)對象組成的是將一組數(shù)據(jù)對象組成的任意任意序列,按序列,按關(guān)鍵字的值重新排列成關(guān)鍵字的值重新排列成有序有序的序列。的序列。n如果按關(guān)鍵字的值如果按關(guān)鍵字的值從大到小從大到小排列,稱為排列,稱為降序降序。反之,如果按關(guān)鍵字的值反之,如果按關(guān)鍵字的值從小到大從小到大排列,稱為排列,稱為升序升序。(1)冒泡排序)冒泡排序n基本思想:基本思想:在一組數(shù)據(jù)對象中,使值較小者象氣在一組數(shù)據(jù)對象中,使值較小者象氣泡那樣逐漸泡那樣逐漸“上浮上浮”,而值較大者逐漸,而值較大者逐漸“下沉下沉”。例如:給定一個由五個整型數(shù)據(jù)對象組成例如:給定一個由五個整型數(shù)據(jù)對
19、象組成的任意序列:的任意序列:4,9,8,7,3。要求采。要求采用冒泡排序法進(jìn)行排序。用冒泡排序法進(jìn)行排序。n把值最大者放到數(shù)列的最后把值最大者放到數(shù)列的最后處理過程:處理過程:從第一個元素開始,比較相鄰從第一個元素開始,比較相鄰兩者,若前者的值比后者大,則互換兩兩者,若前者的值比后者大,則互換兩元素。經(jīng)過一輪處理之后,數(shù)列中最大元素。經(jīng)過一輪處理之后,數(shù)列中最大的數(shù)必然位于數(shù)列的最后(即沉底)。的數(shù)必然位于數(shù)列的最后(即沉底)。編程實(shí)現(xiàn):編程實(shí)現(xiàn):用來表示數(shù)據(jù)對象序列的數(shù)據(jù)結(jié)構(gòu)用來表示數(shù)據(jù)對象序列的數(shù)據(jù)結(jié)構(gòu) 一維數(shù)組。一維數(shù)組。/用非函數(shù)的方法實(shí)現(xiàn)冒泡排序用非函數(shù)的方法實(shí)現(xiàn)冒泡排序(bubb
20、le_non_fun.cpp)#include using namespace std;int main() int array=4,9,8,7,3;int len=sizeof(array)/sizeof(int); /計(jì)算數(shù)組元素個數(shù)計(jì)算數(shù)組元素個數(shù)int i,temp;cout原始序列原始序列:;for (i=0;ilen;i+)/按原始順序輸出按原始順序輸出coutarrayi,;coutendlendl;/排序排序cout排序過程排序過程:endl;for(int pass=1;passlen;pass+)/控制比較的輪數(shù)控制比較的輪數(shù)for(i=0;iarrayi+1)temp=a
21、rrayi;arrayi=arrayi+1;arrayi+1=temp;for (i=0;ilen;i+)/處理一輪后輸出處理一輪后輸出coutarrayi,;coutendl;return 1;4.1.4 二維數(shù)組二維數(shù)組1.二維數(shù)組的定義二維數(shù)組的定義需要兩個下標(biāo)才能標(biāo)識某個元素的數(shù)組稱為二維數(shù)組。需要兩個下標(biāo)才能標(biāo)識某個元素的數(shù)組稱為二維數(shù)組。n二維數(shù)組的定義語法:二維數(shù)組的定義語法:;二維數(shù)組必須要有兩個下標(biāo)說明,分別說明各維的長度。二維數(shù)組必須要有兩個下標(biāo)說明,分別說明各維的長度。各個下標(biāo)說明必須為常量表達(dá)式各個下標(biāo)說明必須為常量表達(dá)式。n二維數(shù)組所包含的元素個數(shù)為兩表達(dá)式的乘積。二
22、維數(shù)組所包含的元素個數(shù)為兩表達(dá)式的乘積。n通常把有通常把有m行、行、n列的數(shù)組稱為列的數(shù)組稱為mn數(shù)組。數(shù)組。例如:例如:int a34;a是個整型二維數(shù)組,有是個整型二維數(shù)組,有3*4共共12個整型元素。個整型元素。該數(shù)組包含三行、四列,故也稱為該數(shù)組包含三行、四列,故也稱為34數(shù)組。數(shù)組。n 二維數(shù)組經(jīng)常用來表示按行和列格式存放信息的數(shù)值表,二維數(shù)組經(jīng)常用來表示按行和列格式存放信息的數(shù)值表,例如:日常生活中的二維表,數(shù)學(xué)中的矩陣等。例如:日常生活中的二維表,數(shù)學(xué)中的矩陣等。2.二維數(shù)組的存儲結(jié)構(gòu)二維數(shù)組的存儲結(jié)構(gòu)int a34數(shù)組的內(nèi)存表示:數(shù)組的內(nèi)存表示:n習(xí)慣上,第一個下標(biāo)表示該元習(xí)慣
23、上,第一個下標(biāo)表示該元素所在的行,稱為素所在的行,稱為行下標(biāo)行下標(biāo);第二;第二個下標(biāo)表示該元素所在的列,稱個下標(biāo)表示該元素所在的列,稱為為列下標(biāo)列下標(biāo)。n二維數(shù)組在內(nèi)存中的存儲順序二維數(shù)組在內(nèi)存中的存儲順序是按行存放,是按行存放,即先依次存放第零即先依次存放第零行的四個元素,再存放第一行的行的四個元素,再存放第一行的四個元素,依次類推,四個元素,依次類推,此種存儲此種存儲方法稱為方法稱為“行主序行主序”法。法。3.二維數(shù)組元素的引用二維數(shù)組元素的引用要標(biāo)識二維數(shù)組中的某個特定的元素,必須指定要標(biāo)識二維數(shù)組中的某個特定的元素,必須指定兩個下標(biāo)。兩個下標(biāo)。n二維數(shù)組的引用格式:二維數(shù)組的引用格式:
24、 說明:各個下標(biāo)表達(dá)式的規(guī)則與一維數(shù)組相同。說明:各個下標(biāo)表達(dá)式的規(guī)則與一維數(shù)組相同。例如:例如:int a34;數(shù)組數(shù)組a中的每個元素用元素名中的每個元素用元素名 aij標(biāo)識,其中標(biāo)識,其中a是數(shù)組是數(shù)組名,名,i和和j構(gòu)成唯一標(biāo)識數(shù)組構(gòu)成唯一標(biāo)識數(shù)組a中每個元素的下標(biāo)。中每個元素的下標(biāo)。i的取值為的取值為(02);j的取值為的取值為(03)。例如:輸入例如:輸入120個學(xué)生的個學(xué)生的C+、高數(shù)、英語三門、高數(shù)、英語三門課程的成績,存放到課程的成績,存放到grade數(shù)組中,并計(jì)算每數(shù)組中,并計(jì)算每個學(xué)生的總成績,存放到個學(xué)生的總成績,存放到total數(shù)組中。數(shù)組中。分析:分析:(1)總共有總
25、共有120個學(xué)生,每個學(xué)生有三門課,因個學(xué)生,每個學(xué)生有三門課,因此,存放學(xué)生成績的此,存放學(xué)生成績的grade數(shù)組應(yīng)該是一個數(shù)組應(yīng)該是一個120*3的二維數(shù)組(的二維數(shù)組(120行行*3列)。列)。如:如:grade90表示第表示第10個學(xué)生的個學(xué)生的C+成績,成績, grade92 表示第表示第10個學(xué)生的英語成績。個學(xué)生的英語成績。(2)每個學(xué)生的總成績要存入到每個學(xué)生的總成績要存入到total數(shù)組中,所數(shù)組中,所以,以,total數(shù)組應(yīng)為一維數(shù)組。數(shù)組應(yīng)為一維數(shù)組。程序:程序:/ arr_2dim_1dim程序程序計(jì)算總成績計(jì)算總成績#include using namespace s
26、td;int main()const int NUM=120; int gradeNUM3,totalNUM; int i,j; /輸入成績;輸入成績; for (j=0;j=2;j+)/控制課程門數(shù)控制課程門數(shù) for (i=0;igradeij; /引用數(shù)組元素引用數(shù)組元素輸入。輸入。/計(jì)算總成績計(jì)算總成績 for (i=0;iNUM;i+) /存入總成績的數(shù)組清零存入總成績的數(shù)組清零 totali=0; for (i=0;iNUM;i+)/計(jì)算每個學(xué)生的總成績計(jì)算每個學(xué)生的總成績 for (j=0;j=2;j+) totali=totali+gradeij; /引用數(shù)組元素引用數(shù)組元素參
27、加運(yùn)算。參加運(yùn)算。 cout 每個學(xué)生的總成績每個學(xué)生的總成績; for (i=0;iNUM;i+) /輸出各個學(xué)生的總分績輸出各個學(xué)生的總分績 cout totali ;return 1;n對一維數(shù)組的訪問可通過單重循環(huán)來完成。對一維數(shù)組的訪問可通過單重循環(huán)來完成。n訪問二維數(shù)組中所有的元素通常需要一個二重循環(huán)。訪問二維數(shù)組中所有的元素通常需要一個二重循環(huán)。4二維數(shù)組的初始化二維數(shù)組的初始化二維數(shù)組也能在定義時被初始化。二維數(shù)組也能在定義時被初始化。n格式:格式:=; 是一個包含是一個包含n*m個元素的初值集合,元素個元素的初值集合,元素之間用逗號分隔,每個之間用逗號分隔,每個元素必須是常量
28、元素必須是常量。例如:例如:int b23=1,2,3,4,5,6;二維數(shù)組二維數(shù)組可以按行用花括號括起來分組賦值可以按行用花括號括起來分組賦值例如:例如: int b23=1,2,3,4,5,6;采用括號分組的寫法,容易識別,易于理解。采用括號分組的寫法,容易識別,易于理解。注意:注意: 可以只對數(shù)組的部分元素賦初值。可以只對數(shù)組的部分元素賦初值。例:例:f0309.cpp例如:例如: int array123=1,2,3,4,5; int array223=1,2,4;(1) 初始化的默認(rèn)規(guī)則,參照一維數(shù)組的初始化規(guī)則。初始化的默認(rèn)規(guī)則,參照一維數(shù)組的初始化規(guī)則。(2)省略第一維大小省略第
29、一維大小如果如果對全部元素都賦初值對全部元素都賦初值,則定義數(shù)組時第一維的大,則定義數(shù)組時第一維的大小可以忽略,但第二維的大小不能省。小可以忽略,但第二維的大小不能省。例如:例如: int a4=1,2,3,4,5,6,7,8,9,10,11,12;等價于:等價于:int a34=1,2,3,4,5,6,7,8,9,10,11,12;在定義時,也可以在定義時,也可以只對部分元素賦初值只對部分元素賦初值而省略第一維而省略第一維的大小,但的大小,但應(yīng)分行賦初值應(yīng)分行賦初值。例如:例如: int a4=1,2,3,1,4,5;4.2 指針指針(P:91)主要內(nèi)容:主要內(nèi)容:指針的概念;指針的概念;指
30、針數(shù)據(jù)對象的定義;指針數(shù)據(jù)對象的定義;指針運(yùn)算;指針運(yùn)算;指針與數(shù)組;指針與數(shù)組;指針限定指針限定4.2.1指針的概念指針的概念1.什么叫指針什么叫指針一個一個數(shù)據(jù)對象的內(nèi)存地址數(shù)據(jù)對象的內(nèi)存地址稱為該數(shù)據(jù)對象的稱為該數(shù)據(jù)對象的指針指針。指針具有不同的類型,可以指向不同的數(shù)據(jù)存儲體。指針具有不同的類型,可以指向不同的數(shù)據(jù)存儲體。2.定義指針變量定義指針變量如果一個變量如果一個變量專門用來存放另一變量的地址專門用來存放另一變量的地址,則它,則它稱為稱為指針變量指針變量。n指針變量的值是指針。指針變量的值是指針。n指針變量也必須指針變量也必須“先定義后使用先定義后使用”??梢栽诤瘮?shù)外部定義全局的指
31、針變量,也可以在函可以在函數(shù)外部定義全局的指針變量,也可以在函數(shù)內(nèi)部定義局部的指針變量。數(shù)內(nèi)部定義局部的指針變量。定義指針變量的語法定義指針變量的語法n一般形式:一般形式:(P:92) *,*,*;類型標(biāo)識符:用來指明指針的類型。類型標(biāo)識符:用來指明指針的類型??梢允腔緮?shù)據(jù)類型,也可以是非基本數(shù)據(jù)類型。可以是基本數(shù)據(jù)類型,也可以是非基本數(shù)據(jù)類型。 *:稱為指針定義符。:稱為指針定義符。標(biāo)識符:指針數(shù)據(jù)對象的名字。標(biāo)識符:指針數(shù)據(jù)對象的名字。例如:例如:int *i_pointer;定義了一個指向整型數(shù)的指針變量定義了一個指向整型數(shù)的指針變量i_pointer。n整型指針變量用來存放一個指向某
32、整型數(shù)的指針,整型指針變量用來存放一個指向某整型數(shù)的指針,即:即:用來存放一個整型數(shù)據(jù)對象的內(nèi)存地址用來存放一個整型數(shù)據(jù)對象的內(nèi)存地址。注意:注意:(1)標(biāo)識符前面的標(biāo)識符前面的“*”并不是名稱的一部分,而是表示該數(shù)并不是名稱的一部分,而是表示該數(shù)據(jù)對象的類型為指針類型。據(jù)對象的類型為指針類型。例如:例如:int *i, *j;對應(yīng)的指針變量名是對應(yīng)的指針變量名是i,j;而不是;而不是*i,*j。(2) 在指針定義中,一個在指針定義中,一個*只能表示一個指針。只能表示一個指針。例如:定義例如:定義iptr1,iptr2兩個指針:兩個指針:int *iptr1, *iptr2;/正確!正確!in
33、t *iptr1,iptr2;/錯誤!錯誤!(3)指針變量可以和其它變量在同一語句中定義。指針變量可以和其它變量在同一語句中定義。例如例如: double d1,*d2;(4)凡可以聲明變量的地方,就可聲明指針變量,它可以是凡可以聲明變量的地方,就可聲明指針變量,它可以是全局、靜態(tài)全局、靜態(tài)局部和局部的。全局、靜態(tài)全局、靜態(tài)局部和局部的。3.建立指針建立指針n建立指針包括定義指針和給指針賦初值。建立指針包括定義指針和給指針賦初值。n如何獲取變量的地址如何獲取變量的地址:用用&操作符可以獲取變量的地址。操作符可以獲取變量的地址。例如:例如:int iCount=18;int *iptr=
34、&iCount;/定義指針變量并初始化定義指針變量并初始化int *iptr;iptr=&iCount; /將將iCount的地址賦給指針變量的地址賦給指針變量 iptr注意:注意:(1)指針在使用前要進(jìn)行初始化。指針在使用前要進(jìn)行初始化。指針忘記賦值比變量忘記賦值危險(xiǎn)得多。指針忘記賦值比變量忘記賦值危險(xiǎn)得多。(2)指針在使用中必須類型匹配。指針在使用中必須類型匹配。即指針變量只能存放同一類型數(shù)據(jù)對象的內(nèi)存地址。即指針變量只能存放同一類型數(shù)據(jù)對象的內(nèi)存地址。例如:例如: char *c; int i; c= &i; /錯誤的賦值錯誤的賦值,因?yàn)?,因?yàn)閏只能指向字符。只能
35、指向字符。n一個指針變量在任何時候都只能指向同一類型的一個指針變量在任何時候都只能指向同一類型的數(shù)據(jù)對象,這就是所謂數(shù)據(jù)對象,這就是所謂“指針類型與實(shí)際存儲的指針類型與實(shí)際存儲的匹配問題匹配問題” 。注意:注意:(3)指針的指針的0值表示空指針,即不指向任何空間。值表示空指針,即不指向任何空間。(4)指針變量可以被賦予初值指針變量可以被賦予初值NULL或或0,這是唯一這是唯一可以賦給任一類型指針變量的值,表示當(dāng)前該可以賦給任一類型指針變量的值,表示當(dāng)前該指針未指向任一變量。指針未指向任一變量。例如:例如:float *pn=NULL;等價于等價于:float *pn=0;4.間接引用指針間接引
36、用指針nC+提供了提供了間接引用操作符間接引用操作符*用來對指針指向用來對指針指向的實(shí)體空間內(nèi)容進(jìn)行讀寫操作。的實(shí)體空間內(nèi)容進(jìn)行讀寫操作。例如:例如:(undirect_ref_P.cpp)#include using namespace std;int main() int *iptr;/ *在指針定義中稱指針定義符在指針定義中稱指針定義符int iCount=18;iptr=&iCount;/ &獲取整型變量的地址獲取整型變量的地址cout*iptrendl; / *在執(zhí)行語句中的指針變量之前稱為間接引用操作符在執(zhí)行語句中的指針變量之前稱為間接引用操作符*iptr=58;c
37、outiCountendl;/顯示顯示58 return1;注意:注意:(1)非指針變量不能用間接引用操作符。非指針變量不能用間接引用操作符。例如例如: int iCount=18;cout*iCount;/Error!( (2)2)指針只有指向具體的實(shí)體,間接訪問操作才指針只有指向具體的實(shí)體,間接訪問操作才有意義。有意義。5.指針變量的地址指針變量的地址n指針變量也是變量,是變量就具有內(nèi)存地址。指針變量也是變量,是變量就具有內(nèi)存地址。所以,所以,指針也有地址指針也有地址。n注意:注意:指針變量的值與指針變量的地址是不同的。指針變量的值與指針變量的地址是不同的。例如:例如:(p_Addr.cp
38、p)/p_Addr.cpp#include using namespace std;int main()int iCount=18;int *iptr=&iCount; /定義整型指針變量并賦初值定義整型指針變量并賦初值*iptr=58;coutiCountendl; /輸出整型變量輸出整型變量iCount的值的值coutiptrendl; /輸出指針變量輸出指針變量iptr的值的值cout&iCountendl;/輸出整型變量輸出整型變量iCount的地址的地址cout*iptrendl; /輸出指針?biāo)赶虻恼妥兞康闹递敵鲋羔標(biāo)赶虻恼妥兞康闹礳out&iptre
39、ndl; /輸出指針變量的地址輸出指針變量的地址return 1;6.二級指針二級指針n指向指針的指針即為二級指針。指向指針的指針即為二級指針。例如:例如:int icount=18;int* ip=&iCount;int * iip=&ip;4.2.2指針運(yùn)算指針運(yùn)算指針變量可以參與部分運(yùn)算,包括加減運(yùn)算、關(guān)系運(yùn)算、指針變量可以參與部分運(yùn)算,包括加減運(yùn)算、關(guān)系運(yùn)算、賦值運(yùn)算等。賦值運(yùn)算等。1指針的賦值指針的賦值操作指針之前必須賦予確定的值(只能是地址或空值操作指針之前必須賦予確定的值(只能是地址或空值NULL),可以在定義指針時賦予初值,也可以用賦值,可以在定義指針時賦予初值
40、,也可以用賦值表達(dá)式對指針變量賦值。表達(dá)式對指針變量賦值。2.指針變量的關(guān)系運(yùn)算指針變量的關(guān)系運(yùn)算n指針變量的關(guān)系運(yùn)算是指針變量的關(guān)系運(yùn)算是指向相同類型數(shù)據(jù)的指針之間指向相同類型數(shù)據(jù)的指針之間進(jìn)行的各種關(guān)系運(yùn)算。進(jìn)行的各種關(guān)系運(yùn)算。n如果兩個指向相同類型的指針變量相等,就表示這兩如果兩個指向相同類型的指針變量相等,就表示這兩個指針是指向同一個變量。個指針是指向同一個變量。注意注意:指向不同類型數(shù)據(jù)的指針之間或指針與指向不同類型數(shù)據(jù)的指針之間或指針與非零非零整數(shù)之整數(shù)之間的關(guān)系運(yùn)算是毫無意義的。間的關(guān)系運(yùn)算是毫無意義的。3指針的加減運(yùn)算指針的加減運(yùn)算n兩個指針值相減得到一個整型數(shù);兩個指針值相減
41、得到一個整型數(shù);n指針值加上或減去一個整數(shù)得到另一個指針值。指針值加上或減去一個整數(shù)得到另一個指針值。n指針和整數(shù)進(jìn)行加減運(yùn)算指針和整數(shù)進(jìn)行加減運(yùn)算允許使用的運(yùn)算符有:允許使用的運(yùn)算符有:+、-、+、- - 。(1)一個指針變量一個指針變量p加上(或減去)一個整型量加上(或減去)一個整型量n,表示,表示指針當(dāng)前所指位置后方(或前方)第個數(shù)的地址,指針當(dāng)前所指位置后方(或前方)第個數(shù)的地址,即:地址偏移了即:地址偏移了n個單位。個單位。具體偏移多少字節(jié),取決于其基類型。具體偏移多少字節(jié),取決于其基類型。例如:例如:一個整型指針變量加上一個整型指針變量加上4等于原存放的地址值加上等于原存放的地址值
42、加上16(字節(jié)字節(jié));一個雙精度型指針變量加上一個雙精度型指針變量加上4等于原存放的地址值加上等于原存放的地址值加上32(字節(jié)字節(jié))。即即:指針運(yùn)算都是以數(shù)據(jù)類型為單位展開的指針運(yùn)算都是以數(shù)據(jù)類型為單位展開的。(2)指針變量的指針變量的+、- -運(yùn)算運(yùn)算 +:表示指針當(dāng)前所指位置下一個數(shù)據(jù)的地址。:表示指針當(dāng)前所指位置下一個數(shù)據(jù)的地址。 即:原地址加上一個地址單位(基類型的實(shí)際字節(jié)數(shù));即:原地址加上一個地址單位(基類型的實(shí)際字節(jié)數(shù)); - -:表示指針當(dāng)前所指位置前一個數(shù)據(jù)的地址。:表示指針當(dāng)前所指位置前一個數(shù)據(jù)的地址。 即:原地址減去一個地址單位(基類型的實(shí)際字節(jié)數(shù));即:原地址減去一個地
43、址單位(基類型的實(shí)際字節(jié)數(shù));注意:注意:參加運(yùn)算的指針變量必須是已賦值的。參加運(yùn)算的指針變量必須是已賦值的。指針進(jìn)行加減運(yùn)算的結(jié)果與指針的類型密切相關(guān)。指針進(jìn)行加減運(yùn)算的結(jié)果與指針的類型密切相關(guān)。不論是指針的加法還是減法,其訪問操作都必須不論是指針的加法還是減法,其訪問操作都必須是有意義的,否則是危險(xiǎn)的。是有意義的,否則是危險(xiǎn)的。使用指針加減運(yùn)算時,一定要對運(yùn)算結(jié)果進(jìn)行核實(shí),使用指針加減運(yùn)算時,一定要對運(yùn)算結(jié)果進(jìn)行核實(shí),保證運(yùn)算結(jié)果所指向的地址是一個程序中分配使保證運(yùn)算結(jié)果所指向的地址是一個程序中分配使用的地址。用的地址。n一般來講,指針的加減運(yùn)算是和數(shù)組的使用相聯(lián)一般來講,指針的加減運(yùn)算是
44、和數(shù)組的使用相聯(lián)系的。系的。因?yàn)?,在使用?shù)組時,我們可以得到連續(xù)因?yàn)椋谑褂脭?shù)組時,我們可以得到連續(xù)的又具有同類型元素的可操作的序列空間。的又具有同類型元素的可操作的序列空間。4.2.3指針與數(shù)組指針與數(shù)組n數(shù)組名本身是一指針,它的類型是指向數(shù)組名本身是一指針,它的類型是指向的數(shù)組元素的類型,它表示數(shù)組的起始的數(shù)組元素的類型,它表示數(shù)組的起始地址。地址。因此,可以直接將數(shù)組名賦給指針,之后,通因此,可以直接將數(shù)組名賦給指針,之后,通過移動指針來對數(shù)組元素進(jìn)行操作。過移動指針來對數(shù)組元素進(jìn)行操作。例如:例如:(point_array.cpp)#include using namespace st
45、d;int main() int iArray10; int sum=0; int *iptr=iArray; /用數(shù)組名用數(shù)組名iArray給指針初始化給指針初始化 for (int i=0;i10;i+)/給數(shù)組賦初值給數(shù)組賦初值iArrayi=i*2; for(int* iP=iArray; iPiArray+10; iP+=1)/輸出數(shù)組元素的地址及數(shù)組元素的值輸出數(shù)組元素的地址及數(shù)組元素的值coutiP: *iPendl; for(int index=0;index10;index+) /計(jì)算數(shù)組元素之和計(jì)算數(shù)組元素之和sum+=*iptr;/通過移動指針訪問數(shù)組元素通過移動指針訪問
46、數(shù)組元素iptr+; coutSum is sumendl; return 1;其中:其中:int *iptr=iArray;等價于等價于: int *iptr;iptr=iArray; 等價等價于:于:iptr=&iArray0;總結(jié):指向數(shù)組的指針和數(shù)組的對應(yīng)關(guān)系:總結(jié):指向數(shù)組的指針和數(shù)組的對應(yīng)關(guān)系:例如:例如:int a100;int *iptr=a;對于數(shù)組對于數(shù)組a,有:,有:a等于等于&a0。iptr注意:注意:數(shù)組名是指針常量,所以給數(shù)組名賦值是錯誤的。數(shù)組名是指針常量,所以給數(shù)組名賦值是錯誤的。例如:例如:#include using namespace st
47、d;int main()int iArray100;int sum; for (int i=0;i100;i+)sum+=*iArray;iArray+;/+ needs l-valuereturn 1;4.2.4指針限定指針限定(P:97)n一個指針可以操作兩個實(shí)體:一個指針可以操作兩個實(shí)體:1)1)指針值(即:地址)指針值(即:地址)2)2)間訪值(即:間訪值(即:指針指向的實(shí)體)指針指向的實(shí)體)n指針的常量性分兩種:指針的常量性分兩種:1)1)指針常量指針常量( (constant pointer)constant pointer)2)2)常量指針常量指針( (pointer to co
48、nstant)pointer to constant)n指針的限定在函數(shù)參數(shù)傳遞中較常用。指針的限定在函數(shù)參數(shù)傳遞中較常用。1.指針常量指針常量( (constant pointer)constant pointer)n指針常量是指針值指針常量是指針值不能修改不能修改的指針。的指針。n在指針定義語句的在指針定義語句的指針名前加指針名前加const,表示指針本身是常,表示指針本身是常量。量。 (const_pointer.cpp)如:如:int int b=10;b=10;intint* * constconst cp=&b;/const cp=&b;/const修飾指針修飾指針
49、cp(cp(指針常量指針常量) ) * *cp=81; /cp=81; /Right!Right!指針常量可以修改指向的實(shí)體指針常量可以修改指向的實(shí)體intint c=18; c=18;cp=&c; /cp=&c; /Error:Error:l-value specifies const objectl-value specifies const object / /指針常量不能修改指針值指針常量不能修改指針值; ;n定義指針常量只限制指針本身不能作為左值進(jìn)行操作,但定義指針常量只限制指針本身不能作為左值進(jìn)行操作,但是,允許修改指針常量間接訪問的單元。是,允許修改指針常量間接訪
50、問的單元。n注意注意:在定義指針常量時必須初始化在定義指針常量時必須初始化,就像常量初始化一樣。就像常量初始化一樣。2.常量指針常量指針( (pointer to constant)pointer to constant)n常量指針是指向常量的指針常量指針是指向常量的指針n在指針定義語句的在指針定義語句的類型前加類型前加constconst,表示指向,表示指向的對象是常量。的對象是常量。例如:例如:( point_to_const.cpp)int a=78;const int *pi=&a;/定義一指向常量的指針定義一指向常量的指針int b=10;pi=&b; /常量指針可以
51、修改指針值常量指針可以修改指針值*pi=50; /Error:l-value specifies const object/常量指針不能修改指向的實(shí)體常量指針不能修改指向的實(shí)體注意:注意:定義常量指針只限制指針的間接訪問操作。定義常量指針只限制指針的間接訪問操作。3.指向常量的指針常量指向常量的指針常量(常量指針常量常量指針常量)n可以定義一個指向常量的指針常量,它必須在可以定義一個指向常量的指針常量,它必須在定義時進(jìn)行初始化。定義時進(jìn)行初始化。例如:例如: (const_point_const.cpp)int ai;const int *const cpi=&ai; /指向常量的指針
52、常量指向常量的指針常量 cpi=&ai;/錯!指針值不能修改錯!指針值不能修改 *cpi=39;/錯!不能修改所指向的對象錯!不能修改所指向的對象 ai=39;/正確!正確! 注意:注意:指向常量的指針常量,指針及其所指向的指向常量的指針常量,指針及其所指向的實(shí)體都不能被修改。實(shí)體都不能被修改。4.2.5動態(tài)內(nèi)存分配動態(tài)內(nèi)存分配(堆內(nèi)存分配堆內(nèi)存分配)P:199在在C+中,動態(tài)內(nèi)存分配技術(shù)可以保證我們在程中,動態(tài)內(nèi)存分配技術(shù)可以保證我們在程序運(yùn)行過程中按實(shí)際需要申請適量的內(nèi)存,使用序運(yùn)行過程中按實(shí)際需要申請適量的內(nèi)存,使用結(jié)束后還可以及時釋放,使有限的內(nèi)存空間得到結(jié)束后還可以及時釋放,
53、使有限的內(nèi)存空間得到有效、充分的利用。有效、充分的利用。1. 堆內(nèi)存堆內(nèi)存n堆內(nèi)存:堆內(nèi)存:在程序運(yùn)行過程中在程序運(yùn)行過程中可隨機(jī)申請和釋放的可隨機(jī)申請和釋放的內(nèi)存空間。內(nèi)存空間。nC+申請和釋放堆內(nèi)存使用兩個運(yùn)算符:申請和釋放堆內(nèi)存使用兩個運(yùn)算符:new 和和delete。2.new運(yùn)算運(yùn)算n運(yùn)算符運(yùn)算符new的功能是:的功能是:動態(tài)分配內(nèi)存。動態(tài)分配內(nèi)存。n語法形式為:語法形式為:new 類型名(初值表);類型名(初值表);n功能功能:在程序運(yùn)行過程中申請分配用于存放指:在程序運(yùn)行過程中申請分配用于存放指定類型數(shù)據(jù)的內(nèi)存空間,并使用初值列表中給定類型數(shù)據(jù)的內(nèi)存空間,并使用初值列表中給出的值
54、進(jìn)行初始化。出的值進(jìn)行初始化。n如果如果內(nèi)存申請成功內(nèi)存申請成功,new運(yùn)算運(yùn)算返回一個指向新分配返回一個指向新分配內(nèi)存首地址的指定類型的指針內(nèi)存首地址的指定類型的指針,我們可以通過這個,我們可以通過這個返回值對堆對象進(jìn)行訪問;返回值對堆對象進(jìn)行訪問;n如果如果內(nèi)存申請失敗內(nèi)存申請失敗,就返回空指針,就返回空指針0(NULL)。)。創(chuàng)建數(shù)組類型的對象創(chuàng)建數(shù)組類型的對象n用用new動態(tài)創(chuàng)建一維數(shù)組的語法形式:動態(tài)創(chuàng)建一維數(shù)組的語法形式:new 類型名類型名下標(biāo)說明下標(biāo)說明;說明:下標(biāo)說明表達(dá)式給出數(shù)組元素的個數(shù)。說明:下標(biāo)說明表達(dá)式給出數(shù)組元素的個數(shù)。n注意:注意:動態(tài)為數(shù)組分配內(nèi)存時,不能指定
55、數(shù)組動態(tài)為數(shù)組分配內(nèi)存時,不能指定數(shù)組元素的初值。元素的初值。3.delete運(yùn)算運(yùn)算n運(yùn)算符運(yùn)算符delete的功能:的功能:用來刪除由用來刪除由new 建立的建立的對象,釋放指針?biāo)赶虻膬?nèi)存空間。對象,釋放指針?biāo)赶虻膬?nèi)存空間。n格式:格式:delete 指針名;指針名;n注意:注意:(1)如果是用如果是用new 建立的數(shù)組,在指針名前面加建立的數(shù)組,在指針名前面加。(2)對于用對于用new建立的對象,只能用建立的對象,只能用delete進(jìn)行一進(jìn)行一次運(yùn)算。次運(yùn)算。(3)這個運(yùn)算也同樣可以對空指針進(jìn)行刪除。這個運(yùn)算也同樣可以對空指針進(jìn)行刪除。例如:例如:new、delete應(yīng)用例應(yīng)用例/n
56、ew_delete.cpp #include using namespace std;int main() int arraysize;int *array,*sum;int count;coutarraysize;if (array=new intarraysize)=NULL)/分配堆內(nèi)存分配堆內(nèi)存coutcant allocate more memory,terminating.n:;exit(1);/退出退出for (count=0;countarraysize;count+)arraycount=count*2;for (count=0;countarraysize;count+)c
57、outarraycount ;coutendlendl;sum=new int(0);coutsum=sumendl;/輸出輸出sum的值的值(地址地址)cout*sum=*sumendlendl;/輸出輸出sum所指單元的值所指單元的值 for (count=0;countarraysize;count+)*sum+=arraycount;coutthe sum of array is :*sumendl;delete sum;deletearray;return 1;4.動態(tài)內(nèi)存分配與釋放函數(shù)動態(tài)內(nèi)存分配與釋放函數(shù)(可不講)在在C+中除了可以用中除了可以用new和和delete運(yùn)算符運(yùn)算符
58、進(jìn)行動態(tài)內(nèi)存管理之外,進(jìn)行動態(tài)內(nèi)存管理之外,C+ 還繼承了還繼承了C中的動態(tài)存儲管理函數(shù)。中的動態(tài)存儲管理函數(shù)。1.動態(tài)存儲分配函數(shù)動態(tài)存儲分配函數(shù)n原型:原型:void *malloc(size_t size);size_t 即:即:unsigned long。參數(shù):參數(shù):size是欲分配的是欲分配的字節(jié)數(shù)字節(jié)數(shù)返回值:成功,則返回返回值:成功,則返回void型指針;型指針; 失敗,則返回空指針失敗,則返回空指針(NULL)。2.動態(tài)內(nèi)存釋放函數(shù)動態(tài)內(nèi)存釋放函數(shù)n原型:原型:void free(void *memblock)參數(shù):參數(shù):memblock是指針,指向需要釋放的內(nèi)存。是指針,指向
59、需要釋放的內(nèi)存。返回值:無返回值:無例如:例如:(第一版P:157 ch8_8.cpp)/malloc_free.cpp#include int main() int arraysize;int *array;int count;coutarraysize;if(array=(int*)malloc(arraysize*sizeof(int)=NULL)coutcant allocate more memory,terminating.n;exit(1);for (count=0;countarraysize;count+)arraycount=count*2;for(count=0;coun
60、tarraysize;count+)coutarraycount ;coutendl;free(array);return 1;4.3 引用引用(P:98)1引用的概念引用的概念從邏輯上理解,從邏輯上理解,引用是個別名引用是個別名。當(dāng)建立引用時,程序用另一個變量或?qū)ο螽?dāng)建立引用時,程序用另一個變量或?qū)ο?目標(biāo)目標(biāo))的名字初始化它。從那時起,引用作為目標(biāo)的的名字初始化它。從那時起,引用作為目標(biāo)的別名使用,別名使用,對引用的改動實(shí)際就是對目標(biāo)的改對引用的改動實(shí)際就是對目標(biāo)的改動。動。即即: 引用就是某一變量或?qū)ο螅繕?biāo))的一個別引用就是某一變量或?qū)ο螅繕?biāo))的一個別名名,對引用的操作就是對目標(biāo)的操作。對引用的操作就是對目標(biāo)的操作。2.引用的聲明方法:引用的聲明方法:類型標(biāo)識符類型標(biāo)識符 &引用名引用名=目標(biāo)變量名;目標(biāo)變量名;如:如:int a; int &ra=a;/聲明引用聲明引用ra,它是變量它是變量a的引用,即別名的引用
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 購買農(nóng)用車協(xié)議合同
- 評估項(xiàng)目居間合同協(xié)議
- 起重機(jī)買賣租賃合同協(xié)議
- 訂制衣柜付款合同協(xié)議
- 湖南省邵陽市邵東市第七中學(xué)2024-2025學(xué)年高一下學(xué)期4月期中地理試題(原卷版+解析版)
- 《第03節(jié) 探究外力做功與物體動能變化的關(guān)系》教學(xué)設(shè)計(jì)
- 樓頂安裝升降機(jī)合同協(xié)議
- 商場攤位轉(zhuǎn)讓合同協(xié)議
- 品牌代言合同協(xié)議
- 和諧協(xié)議書范本
- 勞務(wù)公司與公司合作協(xié)議書
- 電機(jī)與電氣控制技術(shù)課程說課
- 國土空間規(guī)劃與自然資源“一張圖”構(gòu)建的理論方法和實(shí)踐
- 2023學(xué)年完整公開課版虎皮鸚鵡
- 撫順東科精細(xì)化工有限公司 15萬噸-年減水劑單體、3萬噸-年表面活性劑系列產(chǎn)品及16萬噸-年碳酸酯 系列產(chǎn)品建設(shè)項(xiàng)環(huán)境影響報(bào)告
- 產(chǎn)品需求文檔(PRD)模板
- 2022新教科版科學(xué)五下全冊教案、全冊教學(xué)反思(表格式)
- GB/T 5209-1985色漆和清漆耐水性的測定浸水法
- 反有組織犯罪法學(xué)習(xí)PPT
- “問題解決型”課題QC活動程序及案例分析-課件
- 食堂燃?xì)獍踩褂脵z查表
評論
0/150
提交評論