指針引用和動態(tài)空間管理_第1頁
指針引用和動態(tài)空間管理_第2頁
指針引用和動態(tài)空間管理_第3頁
指針引用和動態(tài)空間管理_第4頁
指針引用和動態(tài)空間管理_第5頁
已閱讀5頁,還剩36頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第六章指針引用和動態(tài)空間管理1指針的概念和指針變量的定義一、指針的概念1、內(nèi)存由順序排列的存儲單元組成。 存儲單元以字節(jié)為單位。 每個存儲單元對應(yīng)一個地址。2、指針是存儲特定類型數(shù)據(jù)的地址。3、指針的類型就是指針?biāo)赶虻臄?shù)據(jù)類型24、兩種特殊的指針 void指針(無類型指針): 可用來指向任何類型的數(shù)據(jù)。 空指針(NULL): 不指向任何數(shù)據(jù)。其地址值為0。3二、指針變量的定義和初始化類型修飾符 變量名=指針表達(dá)式;例:int pn, ph;double d, pd1=&d, pd2=pd1;char s=”This is a string ”;void pd3=NULL, pd4=0;lon

2、g pd5=NULL;4s=”string”;s= ”Hi”; ()()5()s=”string”; s= ”Hi”; 3、指針本身和指針?biāo)赶虻臄?shù)據(jù)都為常值(和變量名之前各放一個const)如: char const const s=”Hello! ”;()則: s=”string”; s= ”Hi”; ()()6指針的基本操作一、指針賦值 (=)1、同類型的指針之間可以互相賦值。2、任何類型的指針都可賦值給void指針, 但反之不可。例:int d, pd1=&d; intpd2; voidpd3;則:pd2=pd1; pd3=pd1; pd1=pd3; ()()()7二、取變量的地址(&

3、)例:int d, pd1=&d; int d, pd1; pd1=&d; 三、間接訪問:存取指針?biāo)赶虻臄?shù)據(jù)()例:int d, pd1=&d; pd1=99; cout pd1 d;輸出結(jié)果為:99dpd199 99注:和&是互逆的兩個操作符,可相互抵消。如:&k=3 ; k=3;8if(!p) 2、如果p不是空指針if(p ! =0) if(p=NULL) if(p=0) if(p ! =NULL) if(p) 9五、計(jì)算兩地址間數(shù)據(jù)單元的個數(shù)(同類型的兩指針相減)例:int n,m12, p1=&m5, p2=&m10; n=p2-p1;n的值為5,表示p1,p2之間有5個int型數(shù)據(jù)

4、1、計(jì)算數(shù)據(jù)個數(shù)時,不把作為被減數(shù)的那 個指針?biāo)赶虻臄?shù)據(jù)計(jì)算在內(nèi)。2、只有高地址指針減低地址指針才有意義10六、指針移動1、移動n個單位向后(高地址)移動n個數(shù)據(jù)單元 指針表達(dá)式+n 指針變量+=n向前(低地址)移動n個數(shù)據(jù)單元 指針表達(dá)式-n 指針變量-=n112、移動1個單位 +指針變量 - 指針變量先將指針向后(或向前)移動一個單位,再以改變后的指針值作為表達(dá)式的值。 指針變量+ 指針變量-先以指針變量的值作為表達(dá)式的值,再將指針向后(或向前)移動一個單位,12例1:int k, pk=&k;cout+pk ;coutpk;若pk初始值為3691,則輸出結(jié)果為:3691 3691例2:

5、int k, pk=&k;coutpk+ ;coutpk;若pk初始值為3691,則輸出結(jié)果為:3691 369513七、指針表達(dá)式的副作用 數(shù)值表達(dá)式副作用的有關(guān)結(jié)論,對于指針表達(dá)式同樣適用。作用于變量的操作只能施加于變量對象。當(dāng)若干個作用于變量的操作施加于同一變量時,除了最后一個外,不得有后增1或后減1操作。14八、指針類型的強(qiáng)制轉(zhuǎn)換任何類型的指針之間都可以強(qiáng)制轉(zhuǎn)換。格式:(類型修飾符)指針表達(dá)式如:int i; charp=(char)&i;九、指針操作符的綜合運(yùn)用15具體實(shí)例過程講解:int i;int j;int * pi=0;int * pj=0;i=10;j=20;pi=&i;p

6、j=&j;pi=pj;pi=&i;*pi=*pj;16int d=5,8,9, *p=d;區(qū)分以下表達(dá)式含義: *p+; (*p)+; *+p; +*p;17Ai2、訪問數(shù)組元素的兩種方式下標(biāo)方式:指針方式:(A+i)183、指向一維數(shù)組首元素的指針可以象數(shù)組名一樣使用。如: int A10, pa=A; 則:Ai (A+i) (pa+i) pai19例:int s =0,1,2,3,4,5, p=s;coutendlpp1(p+2)s3p4(s+5);coutendl +p; coutendl p;注:數(shù)組名是指針常量,其值不能改變。012345 0 1 2 3 4 5sp輸出結(jié)果為:012

7、3451120二、二維數(shù)組元素的指針訪問方式1、將二維數(shù)組的每一行當(dāng)作一個一維數(shù)組。如:int B34;則:可將B看作由三個一維數(shù)組B0,B1,B2組成。2、二維數(shù)組的數(shù)組名是指向該數(shù)組首行的 指針。如: int B34;則: B &B0;213、二維數(shù)組元素的下標(biāo)訪問方式與指針訪 問方式的轉(zhuǎn)換。Bij(Bi+j) (B+i)+j)4、指向二維數(shù)組首行的指針可以象二維數(shù)組名一樣使用。如:int B34,(pb)4=B;則:pbij Bij22指向二維數(shù)組的指針變量:2、指向數(shù)組的指針變量的定義格式指向一維數(shù)組的指針變量:類型修飾符變量名=一維數(shù)組名;如:int A10; int pa=A; 類

8、型修飾符(變量名)列數(shù)=二維數(shù)組名;如:int B34; int (pb)4=B;23四、字符指針與字符串指向字符型數(shù)組首元素的指針可代表存儲于該處的字符串。如:char s1 = ”string”; charp1=s1;則:s1,p1表示同一個字符串”string”。24五、指針數(shù)組如:intp5; /p是一個指針數(shù)組 int(p)5; /p是一個指向二維數(shù)組的指針例1:char WEEKDAY 4=”Sun”, ”Mon”, ”Tue”, ”Wed”, ”Thu”, ”Fri”, ”Sat” ;例2:char WEEKDAY =”Sun”, ”Mon”, ”Tue”, ”Wed”, ”Th

9、u”, ”Fri”, ”Sat” ;25六、數(shù)組參數(shù)數(shù)組參數(shù)可以用指針來表示。如:void sumall(int data 5,int result , int rows); void sumall(int (data)5, int result, int rows);26指針與函數(shù)一、指針參數(shù)1、函數(shù)要處理的不是指針本身,而是指 針?biāo)赶虻臄?shù)據(jù)。2、指針參數(shù)的傳遞:把實(shí)參指針?biāo)赶?的數(shù)據(jù)間接地傳遞給被調(diào)用的函數(shù)。3、通過指針參數(shù)的傳遞,形參指針和實(shí)參指針指向同一數(shù)據(jù),因此通過改變形參指針?biāo)傅臄?shù)據(jù)可以改變實(shí)參指針?biāo)傅臄?shù)據(jù)。27例:int addTo(int data, intagg)re

10、turn agg+=data;int total=0;addTo(5,&total);couttotal;coutendladdTo(8,&total);輸出結(jié)果為:5130513total total totalagg agg agg28說明:1、若形參是指向簡單變量的指針,則對 應(yīng)的實(shí)參通常是帶&的簡單變量名。 如: &total2、若形參是指向數(shù)組變量的指針,則對 應(yīng)的實(shí)參通常是一個數(shù)組名。29二、指針函數(shù)(函數(shù)的返回值為指針)類型修飾符 函數(shù)名(形參表)函數(shù)體例:函數(shù)strchr,在字符串str中查找字符ch,并返回所找到的字符的地址。charstrchr(charstr,char c

11、h) while (str!= 0) if(str=ch) return str; str+; return 0;則strchr(” chinese”,i)的調(diào)用結(jié)果為:” inese”30三、函數(shù)指針(指向函數(shù)的指針)1、定義格式:類型修飾符 函數(shù)名(形參表);類型修飾符 (變量名)(形參表)=函數(shù)名;類型修飾符 函數(shù)名(形參表);類型修飾符 (變量名)(形參表)=函數(shù)名;31例1:int fa(int,char)int(pfa) (int,char)=fa;例2:P174 6.4-2charfb(const char)char(pfb)(const char)=fb;322、函數(shù)名就是指向

12、該函數(shù)的指針常量。3、函數(shù)指針可用來調(diào)用所指向的函數(shù)。若有:int add(int,int);int(p)(int,int)=add;則有:add(3,5) (p)(3,5) p(3,5) (add)(3,5)四、作為參數(shù)傳遞的函數(shù)33引用一、引用:為變量、函數(shù)等對象規(guī)定的別名。二、定義引用變量的格式:類型修飾符& 別名=別名所代表的象;1、引用變量定義時必須初始化。2、引用所代表的對象不同,則定義引用 的格式也不同。34例:int i=0; int& ir=i;int a10, p=a;int& ra1=a6;int(&ra2)10=a;int&rp1=p;int& rp2=p;35三、對引

13、用的操作就是對其所代表的變量 的操作。例:int i=5; int& ri1=i;couti ri1endl;i=3;couti ri1endl;ri1+=5;couti ri1endl;輸出結(jié)果為:5 515 1520 2036四、引用與被引用的對象具有相同的地址。例:int i=5; int& ri1=i; cout&i &ri1;輸出結(jié)果為:0 x8f8bfff4 0 x8f8bfff4五、引用參數(shù)37templatevoid swap(Ta,Tb)T c=a;a=b;b=c;void main( )int x=3,y=5;s);templatevoid s)T c=a;a=b;b=c;void main( )int x=3,y=5;s);38動態(tài)空間管理程序運(yùn)行時,動態(tài)地取得或釋放空間。 new:從內(nèi)存申請動態(tài)空間: 申請成功:返回一個指向該空間的指針。 申請失?。悍祷匾粋€空指針。 delete:釋放用new操作符申請的動態(tài)空間。39一、非數(shù)組動態(tài)空間 new 類型說明 (表達(dá)式) delete 指針表達(dá)式,指針表達(dá)式例:intp1, p2; p1=new int(5); p2=new(int); p2=new int(7);

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論