




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第六章 數(shù)組指針與字符串,6.1 數(shù)組 6.2 指針 6.3動(dòng)態(tài)內(nèi)存分配 6.4字符串 小結(jié),6.1 數(shù)組,1.數(shù)組的定義與使用 2.數(shù)組作為函數(shù)參數(shù) 3.對象數(shù)組,1. 數(shù)組的定義與使用,例6-1: #include using namespace std; void main() int A10,B10,i; /聲明:類型名 數(shù)組名下標(biāo)表達(dá)式 int a23=1,0,0,2,3,4; /聲明時(shí)賦初值,按行存儲 for(i=0;i10;i+) Ai=i*2-1; /使用:數(shù)組名下標(biāo)表達(dá)式 B10-i-1=Ai; for(i=0;i10;i+) cout”A”i”=”Ai; cout” B”i
2、”=”Bi; ,2.數(shù)組作為函數(shù)參數(shù),例6-2:數(shù)組元素和數(shù)組名作為函數(shù)參數(shù)來進(jìn)行數(shù)據(jù)傳遞和共享。 #include using namespace std; void RowSum(int A 4,int nrow)/計(jì)算A每行元素之和,nrow為行數(shù) for(int i=0; inrow; i+) for(int j=1; j4; j+) Ai0+=Aij; void main() int Table34=1,2,3,4,2,3,4,5,3,4,5,6; for(int i=0;i3;i+) for(int j=0;j4;j+) coutTableij“ “; coutendl; RowS
3、um(Table,3); /數(shù)組名實(shí)參,傳遞首地址 for(i=0;i3;i+) couti“:”Tablei0endl; ,1 2 3 4 2 3 4 5 3 4 5 6 0:10 1:14 2:18,3.對象數(shù)組,1)聲明: 下標(biāo)表達(dá)式. 2)訪問:數(shù)組名下標(biāo).公有成員名 例如:DATE dates7; DATE date235; 3)對象數(shù)組賦初值與賦值 DATE dates3=DATE(7,22,2007),/注意數(shù)組元素的 DATE(7,23,2007), /賦初值方式; DATE(7,24,2007); dates0=DATE(7,24,2007); /數(shù)組元素賦值 dates1=
4、DATE(7,25,2007); dates2=DATE(7,26,2007);,class DATE public:DATE(int m,int d,int y);,例6-3:對象數(shù)組,/Location.h #ifndef _LOCATION_H #define _LOCATION_H class Location public: Location(); Location(int xx,int yy);/構(gòu)造函數(shù)重載 Location(); void move(int x,int y); void print(); private:int X,Y; ; #endif,例6-3:對象數(shù)組(續(xù)
5、1),/Location.cpp #includeLocation.h Location:Location() X=0;Y=0; coutDefault Constructor called.endl; Location:Location(int xx,int yy) X=xx; Y=yy; coutConstructor called.endl; Location:Location() coutDestructor called.endl; void Location:move(int x,int y) X=x; Y=y; void Location:print() coutX:X Y:Ye
6、ndl; ,例6-3:對象數(shù)組(續(xù)2),#include using namespace std; #include Location.h void main() coutEntering main.endl; Location A3=Location(1,2);/聲明對象數(shù)組并賦初值,A1和A2調(diào)用默認(rèn)構(gòu)造函數(shù)置空 A1=Location(3,4); /臨時(shí)對象給數(shù)組元素賦值,用畢釋放 for(int i=0;i3;i+) Ai.print(); /打印初值 Ai.move(i+10,i+20); Ai.print(); coutExiting main.endl; ,例6-3:對象數(shù)組(續(xù)
7、3),結(jié)果: Entering main. Constructor called. /數(shù)組元素賦初值 Default Constructor called. /缺省構(gòu)造函數(shù)賦初值 Default Constructor called. Constructor called. /數(shù)組元素再賦值 Destructor called. /釋放臨時(shí)對象值 X:1 Y:2 /打印初值 X:10 Y:20 /打印移動(dòng)值 X:3 Y:4 X:11 Y:21 X:0 Y:0 X:12 Y:22 Exiting main. Destructor called. Destructor called. Destru
8、ctor called.,6.2 指針,1.指針的一般概念 2.幾個(gè)特殊類型指針 3.用指針處理數(shù)組元素 4.指針數(shù)組 5.指向數(shù)組的指針 6.指針作為函數(shù)參數(shù) 7.指針型函數(shù)和指向函數(shù)的指針 8.對象指針,1. 指針的一般概念,內(nèi)存空間訪問方式:一是通過變量名,二是通過地址 指針變量:存放內(nèi)存單元地址的變量 指針聲明: 數(shù)據(jù)類型 *標(biāo)識符 運(yùn)算符*和/聲明并初始化float指針,2.幾個(gè)特殊類型指針,指向常量的指針: 例:int a=1, 2, 3, 4, b=3,4,5; const int *name1=a; name1=b; /正確,name1本身值可變 *name1=22; /錯(cuò),n
9、ame1指向的地址單元內(nèi)容不能 指針類型常量(常量指針): 例: int *const name2=a; name2=b; /錯(cuò),name2本身值不能變 *name2=45; /對,name2指向的地址單元內(nèi)容可變 void類型指針: 例:void vobject; /錯(cuò),不能聲明void型變量 void *pv; /可以聲明void型指針 int *pint,i; pv= /強(qiáng)制類型轉(zhuǎn)換,3.用指針處理數(shù)組元素,例:int array5; int *p; p=array; 則:array, DATE *pb4; 說明:1)后條語句聲明了一個(gè)結(jié)構(gòu)體類型DATE指針數(shù)組,有4個(gè)元素,每個(gè)元素都是
10、指向DATE型數(shù)據(jù)的指針 2)指針數(shù)組要先賦值,再引用,指針數(shù)組例1,例64 #include using namespace std; void main() int line3=1,0,0,0,1,0,0,0,1; int *p_line3; p_line0=line0; p_line1=line1; p_line2=line2; coutMatrix test: endl; for(int i=0;i3;i+) for(int j=0;j3;j+) coutp_lineij ; coutendl; ,輸出: 1 0 0 0 1 0 0 0 1,例6-4:指針數(shù)組例2,#include u
11、sing namespace std; class A public: A(int i=0,int j=0) a=i;b=j; void Print() coutPrint(); ,輸出: 5,7 0,0 7,8,5. 指向數(shù)組的指針,一維格式: 類型名 (*指針名)下標(biāo)表達(dá)式; 例1: int (*pa)3; 例2: DATE AA64; DATE (*pb)4; pb=AA; 說明:例2聲明了一個(gè)指向有4個(gè)元素的結(jié)構(gòu)體DATE數(shù)組的指針變量pb,pb為行指針,不能指向一維數(shù)組中第j個(gè)元素. 指向第i行第j列元素格式:*(*(pb+i)+j)行。,例6-5:指向數(shù)組的指針例,#include
12、 using namespace std; void main() int a34=1,3,5,7,9,11,13,15,17,19,21,23; int (*p)4,i,j; p=a; for (i=0;i3;i+) coutai,0=*(*(p+i)+0); ,運(yùn)行結(jié)果: a0,0=1 a1,0=9 a2,0=17,6.指針作為函數(shù)參數(shù),指針為形參時(shí)的作用: 1)使實(shí)參與形參指針指向共同的內(nèi)存空間,達(dá)到數(shù)據(jù)雙向傳遞的目的;C+中由引用實(shí)現(xiàn)該目的; 2)減少函數(shù)調(diào)用時(shí)數(shù)據(jù)傳遞的開銷; 3)通過指針函數(shù)的指針傳遞函數(shù)代碼的首地址。,指針作為函數(shù)參數(shù)例,例6_6 讀入三個(gè)浮點(diǎn)數(shù),將整數(shù)、小數(shù)部分
13、分別輸出 #include using namespace std; void splitfloat(float x,int *intpart,float *fracpart) *intpart=int(x); *fracpart=x-*intpart; void main() int i,n; float x,f; coutx; splitfloat(x, ,結(jié)果: Enter 2 float point numbers: 8.913 Integer Part=8 Fraction Part=0.913 -4.7518 Integer Part=-4 Fraction Part=-0.751
14、8,7.指針型函數(shù)和指向函數(shù)的指針,1)指針型函數(shù) 定義: 數(shù)據(jù)類型 *函數(shù)名(形參表) 函數(shù)體 說明:當(dāng)一個(gè)函數(shù)的返回值是指針類型,該函數(shù)就是指針型函數(shù) 用途:在函數(shù)結(jié)束時(shí)返回大量數(shù)據(jù)到主調(diào)函數(shù)中. 2)指向函數(shù)的指針 定義: 數(shù)據(jù)類型 (*函數(shù)指針名)(形參表) 賦值: 函數(shù)指針名=函數(shù)名; 說明:函數(shù)指針是用于存放函數(shù)代碼首地址的變量. 用途:用指向函數(shù)的指針來調(diào)用函數(shù)(同函數(shù)名調(diào)用函數(shù)一樣),例6_11:函數(shù)指針 void print_stuff(float data_to_print) cout“The data to be listed is “data_to_printendl;
15、 void (*function_pointer)(float); void main() function_pointer=print_stuff; function_pointer(3.14); print_stuff(3.14);,The data to be listed is 3.14 The data to be listed is 3.14,8.對象指針,1)對象指針一般概念 聲明: 類名 *對象指針名; 訪問: 對象指針名-成員名; /利用對象指針訪問公有成員 2)this指針 該指針是隱含于每一個(gè)類的成員函數(shù)中的特殊指針; 該指針指向正在被某個(gè)成員函數(shù)操作的對象; this-
16、X指明成員函數(shù)當(dāng)前操作數(shù)據(jù)所屬的對象; *this標(biāo)識正在調(diào)用該成員函數(shù)的對象;,例6-7:對象指針例,#include using namespace std; class A public: A() a=b=0; A(int i,int j) a=i;b=j; void copy(A ,輸出: 3,4,3) 指向類的非靜態(tài)成員的指針,(1)用指針操作公有數(shù)據(jù)成員 聲明指向公有數(shù)據(jù)成員的指針: 類型名 類名:*指針名; /int A:*p1; 對數(shù)據(jù)成員指針賦值: 指針名=,/A a,*p2;聲明對象指針,例6_8:訪問對象的公有成員函數(shù)的不同方式,class Point public:Po
17、int(int a,int b)x=a;y=b; int GetX()return x; private:int x,y; void main() Point A(4,5); Point *p1= /使用對象名訪問成員函數(shù) ,4)指向類的靜態(tài)成員的指針,類的靜態(tài)成員可以用普通的指針來指向和訪問。 例6-9: (略去頭文件) class P public: static int countP; /靜態(tài)數(shù)據(jù)成員 static void GetC( ) coutcountPendl;/靜態(tài)成員函數(shù) ; int P:countP=10; void main( ) int *count = ,復(fù)習(xí): C
18、+對指針擴(kuò)展用法,對象指針: Point A(4,5); Point *p1=,6.3 動(dòng)態(tài)內(nèi)存分配,1. 堆對象 在程序運(yùn)行過程中根據(jù)需要可以隨時(shí)建立或刪除的對象; 2. 堆對象運(yùn)算符: new、delete 3. new運(yùn)算符 動(dòng)態(tài)內(nèi)存分配或稱動(dòng)態(tài)創(chuàng)建堆對象。 格式: new 類型名(初始值列表) 例: int *pi; pi = new int(2); new運(yùn)算符返回一個(gè)與new所分配對象類型相匹配的指針,如果new運(yùn)算符不能分配到所需要的內(nèi)存,將返回0,這時(shí)為空指針;,動(dòng)態(tài)內(nèi)存分配(續(xù)1),用new運(yùn)算符創(chuàng)建數(shù)組的語法形式: new 類型名下標(biāo)表達(dá)式; /一維數(shù)組 new 類型名下標(biāo)
19、表達(dá)式1下標(biāo)表達(dá)式2; 例:A *ptr ; /建立對象指針 ptr=new A5; /動(dòng)態(tài)分配用于存放類A類型數(shù)據(jù)的空間,A有5個(gè)數(shù)組元素,將首地址賦給指針ptr. 注意:1)使用new創(chuàng)建對象數(shù)組或一般數(shù)組時(shí),不能為該數(shù)組指定初始值,其初始值為缺省值; 2)使用new創(chuàng)建對象數(shù)組時(shí),類中必須說明缺省構(gòu)造函數(shù);,動(dòng)態(tài)內(nèi)存分配(續(xù)2),4. Delete運(yùn)算符 作用:刪除用new創(chuàng)建的對象或一般類型的指針. 格式: delete 指針名 例如:A *ptr; ptr=new A(5,6); delete ptr; 刪除對象數(shù)組格式: delete 指針名 例如:A *ptr; ptr=new
20、A5; delete ptr;,#include #include #include void main() int x=60,*p; if (p=(int *)malloc(sizeof(int)=NULL) printf(heap error!n); exit(1); if (p=new int)=NULL) coutHeap error!n; exit(1); else *p=x; coutSave an integer:*pendl; delete p; coutMemory freed!n; ,例6.10 運(yùn)算符new與delete的用法,例6.11 動(dòng)態(tài)對象或動(dòng)態(tài)變量的“別名”問題
21、,#include void main() int *pa=new int1; int *pb=new int1; *pa=28; *pb=64; cout(1)a=*pa,b=*pbendl; pa=pb; cout(2)a=*pa,b=*pbendl; *pa=206; cout(3)a=*pa,b=*pbendl; delete pa; /delete pb; /編譯連接均無錯(cuò),但運(yùn)行錯(cuò) ,動(dòng)態(tài)創(chuàng)建對象例6_12,#include using namespace std; class Point public: Point( )X=Y=0; coutDefault Constructor
22、 called.endl; Point(int xx,int yy) X=xx;Y=yy; coutConstructor called.endl; Point( ) coutDestructor called.endl; void Move(int x,int y)X=x;Y=y; private: int X,Y; ;,動(dòng)態(tài)創(chuàng)建對象例6_13(續(xù)1),void main() coutStep One:endl; Point *ptr1=new Point;/動(dòng)態(tài)創(chuàng)建對象,無初值,調(diào)用默認(rèn)構(gòu)造函數(shù) delete ptr1;/刪除對象,自動(dòng)調(diào)用析構(gòu)函數(shù) coutStep Two:endl; p
23、tr1=new Point(1,2);/動(dòng)態(tài)創(chuàng)建對象并給初值,調(diào)用有形參構(gòu)造函數(shù) delete ptr1;/刪除對象,自動(dòng)調(diào)用析構(gòu)函數(shù) coutStep Three:endl; ptr1=new Point2; /動(dòng)態(tài)創(chuàng)建對象數(shù)組,調(diào)用默認(rèn)構(gòu)造函數(shù) ptr10.Move(5,10); ,動(dòng)態(tài)創(chuàng)建對象例6_13(續(xù)2),結(jié)果: Step One: Default Constructor Destructor called. Step Two: Constructor called. Destructor called. Step Three: Default Constructor called
24、. Default Constructor called. /用new創(chuàng)建的動(dòng)態(tài)對象,只能用delete釋放.僅釋放2個(gè) /可以用動(dòng)態(tài)數(shù)組類解決動(dòng)態(tài)數(shù)組的自動(dòng)建立和刪除,動(dòng)態(tài)數(shù)組類6_14,將數(shù)組的建立和刪除過程封裝起來,形成一個(gè)動(dòng)態(tài)數(shù)組類.,例6_14:由動(dòng)態(tài)數(shù)組類完成Point類動(dòng)態(tài)數(shù)組的創(chuàng)建和釋放. #include class Point public: Point(int x=0,int y=0) xx=x;yy=y; Point() cout“析構(gòu)Point對象endl; void Move(int x,int y) xx=x;yy=y; void print()coutx=xx
25、yy=yyendl; private: int xx,yy; ;,class ArrayOfPoint public: ArrayOfPoint(int n) numberOfPoints=n; points=new Pointn; ArrayOfPoint() cout“釋放動(dòng)態(tài)空間”endl; numberOfPoints=0; delete points; Point,void main() int number(4); ArrayOfPoint points(number); points.Element(3).print(); points.Element(0).Move(5,10)
26、; points.Element(0).print(); ,結(jié)果: x=0 yy=0 x=5 yy=10 釋放動(dòng)態(tài)空間 析構(gòu)Point對象 析構(gòu)Point對象 析構(gòu)Point對象 析構(gòu)Point對象,動(dòng)態(tài)創(chuàng)建多維數(shù)組6_15,#include using namespace std; void main() float (*cp)98; int i,j,k; cp=new float898; for(i=0;i8;i+) for(j=0;j9;j+) for(k=0;k8;k+) *(*(*(cp+i)+j)+k)=i*100+j*10+k; coutcpijk ; coutendl; cou
27、tendl; delete cp; ,6.4 字符串,C+處理字符串的兩種方法: (1)字符型數(shù)組; (2)string類 字符型數(shù)組處理字符串 例6-15:計(jì)算字符串中單詞數(shù),#include void main() char string=I am a boy.; int i,num=0,word=0; char c; for(i=0;(c=stringi)!=0;i+) if(c= )word=0; else if(word=0) word=1; num+; coutThere are num words in the line.endl; ,2. string類,標(biāo)準(zhǔn)C+庫 它是極為靈活并可
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 院子教學(xué)課件
- 文庫發(fā)布:中醫(yī)課程
- 洗車美容教學(xué)課件
- 泡綿路軌式平切機(jī)項(xiàng)目可行性研究報(bào)告評審方案設(shè)計(jì)2025年發(fā)改委立項(xiàng)
- 介入雙語教學(xué)課件
- 教育類課件教學(xué)課件
- 課件教學(xué)設(shè)計(jì)配套
- 【龍巖】2025年福建龍巖上杭縣事業(yè)單位公開招聘工作人員119人筆試歷年典型考題及考點(diǎn)剖析附帶答案詳解
- 易錯(cuò)點(diǎn)11權(quán)利與義務(wù)-備戰(zhàn)2021年中考道德與法治一輪復(fù)習(xí)易錯(cuò)題
- 旅游直播活動(dòng)方案
- 裝修改造工程施工總平面圖6
- 教師的職業(yè)生涯規(guī)劃與專業(yè)發(fā)展課件
- (完整版)標(biāo)書密封條格式word
- 《關(guān)于漢語規(guī)范化的意義探析》
- 公司一年完稅證明模板
- [湖南]5萬噸凈水廠給排水工藝全套圖紙(附170頁計(jì)算說明)
- DB33T 1203-2020 建設(shè)工程施工揚(yáng)塵控制技術(shù)標(biāo)準(zhǔn)
- 外國文學(xué)名著導(dǎo)讀
- 腦卒中患者血壓管理
- 如何制作OruxMaps離線地圖
- 校企汽修專業(yè)戰(zhàn)略合作協(xié)議書
評論
0/150
提交評論