《c語(yǔ)言程序設(shè)計(jì)教學(xué)》第11章指針與數(shù)組課件_第1頁(yè)
《c語(yǔ)言程序設(shè)計(jì)教學(xué)》第11章指針與數(shù)組課件_第2頁(yè)
《c語(yǔ)言程序設(shè)計(jì)教學(xué)》第11章指針與數(shù)組課件_第3頁(yè)
《c語(yǔ)言程序設(shè)計(jì)教學(xué)》第11章指針與數(shù)組課件_第4頁(yè)
《c語(yǔ)言程序設(shè)計(jì)教學(xué)》第11章指針與數(shù)組課件_第5頁(yè)
已閱讀5頁(yè),還剩38頁(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、第11章 數(shù)組與指針第1頁(yè),共43頁(yè)。數(shù)組與指針指針和一維數(shù)組指針和二維數(shù)組動(dòng)態(tài)內(nèi)存分配函數(shù)第2頁(yè),共43頁(yè)。數(shù)組與指針 一個(gè)變量有地址,一個(gè)數(shù)組包含若干元素,每個(gè)數(shù)組元素都在內(nèi)存中占用存儲(chǔ)單元,它們都有相應(yīng)的地址。 指針變量既然可以指向變量,當(dāng)然也可以指向數(shù)組元素(把某一元素的地址放到一個(gè)指針變量中)。 數(shù)組元素的指針就是數(shù)組元素的地址。 第3頁(yè),共43頁(yè)??梢杂靡粋€(gè)指針變量指向一個(gè)數(shù)組元素 int a10=1,3,5,7,9,11,13,15,17,19; int *p; p=&a0;等價(jià)于p=a;等價(jià)于int *p=a;或int *p=&a0;注意:數(shù)組名a不代表整個(gè)數(shù)組,只代表數(shù)組首元

2、素的地址。p=a;的作用是“把a(bǔ)數(shù)組的首元素的地址賦給指針變量p”,而不是“把數(shù)組a各元素的值賦給p”。指針與一維數(shù)組第4頁(yè),共43頁(yè)。在引用數(shù)組元素時(shí)指針的運(yùn)算在指針指向數(shù)組元素時(shí),允許以下運(yùn)算: 加一個(gè)整數(shù)(用+或+=),如p+1 減一個(gè)整數(shù)(用-或-=),如p-1 自加運(yùn)算,如p+,+p 自減運(yùn)算,如p-,-p 兩個(gè)指針相減,如p1-p2 (只有p1和p2都指向同一數(shù)組中的元素時(shí)才有意義)第5頁(yè),共43頁(yè)。 如果指針變量p已指向數(shù)組中的一個(gè)元素,則p+1指向同一數(shù)組中的下一個(gè)元素,p-1指向同一數(shù)組中的上一個(gè)元素。 例:float a10, *p=a; 假設(shè)a0的地址為2000,則: p

3、的值為2000 p+1的值為2004 p-1的值為1996越界第6頁(yè),共43頁(yè)。 如果的初值為&a0,則p+i和a+i就是數(shù)組元素ai的地址,或者說(shuō),它們指向a數(shù)組序號(hào)為i的元素*(p+i)或*(a+i)是p+i或a+i所指向的數(shù)組元素,即ai。a0a1a2a3a4a5a6a7a8a9pp+1,a+1 p+i,a+i p+9,a+9 *(p+i)第7頁(yè),共43頁(yè)。通過(guò)指針引用數(shù)組元素引用一個(gè)數(shù)組元素,可以用:() 下標(biāo)法,如ai形式;() 指針?lè)ǎ?(a+i)或*(p+i);其中a是數(shù)組名,p是指向數(shù)組元素的指針變量,其初值p=a。例:輸出數(shù)組中的全部元素。 假設(shè)int a5,要輸出各元素的

4、值有四種方法: 第8頁(yè),共43頁(yè)。(1)下標(biāo)法。第9頁(yè),共43頁(yè)。(2) 通過(guò)數(shù)組名計(jì)算數(shù)組元素地址,找出元素的值。第10頁(yè),共43頁(yè)。(3) 用指針變量指向數(shù)組元素。雖然p和a的值都是數(shù)組的首地址,但是數(shù)組名a不能執(zhí)行增1或減1操作。因?yàn)閿?shù)組名是指針常量,代表一個(gè)地址常量,其值不能改變;指針是變量,其值可以改變。第11頁(yè),共43頁(yè)。3種方法的比較: 第(1)和第(2)種方法執(zhí)行效率相同編譯系統(tǒng)是將ai轉(zhuǎn)換為*(a+i)處理的,即先計(jì)算元素地址。因此用第(1)和第(2)種方法找數(shù)組元素費(fèi)時(shí)較多。 第(3)種方法比第(1)、第(2)種方法快用指針變量直接指向元素,不必每次都重新計(jì)算地址,像p+這

5、樣的自加操作是比較快的這種有規(guī)律地改變地址值(p+)能大大提高執(zhí)行效率 用下標(biāo)法比較直觀,能直接知道是第幾個(gè)元素。 用地址法或指針變量的方法不直觀,難以很快地判斷出當(dāng)前處理的是哪一個(gè)元素。第12頁(yè),共43頁(yè)。(4)指針的下標(biāo)法第13頁(yè),共43頁(yè)。數(shù)組名和指針變量作函數(shù)參數(shù)第14頁(yè),共43頁(yè)。第15頁(yè),共43頁(yè)。a+i*(a+i);被調(diào)函數(shù)的形參聲明為數(shù)組類型,用指針?lè)ㄔL問(wèn)數(shù)組元素第16頁(yè),共43頁(yè)。第17頁(yè),共43頁(yè)。指針與二維數(shù)組 二維數(shù)組可以看作一維數(shù)組,其每個(gè)數(shù)組元素又是一個(gè)一維數(shù)組a00a01a02aa0a1a10a11a12第18頁(yè),共43頁(yè)。a00a01a02aa0a1a10a11

6、a12第19頁(yè),共43頁(yè)。a0可以看做3個(gè)短整型元素組成的一維數(shù)組的數(shù)組名a00a01a02a0a1a10a11a12第20頁(yè),共43頁(yè)。 如果將二維數(shù)組名a看成一個(gè)行地址(第0行),則a+i表示二維數(shù)組第i行的地址,ai可看成一個(gè)列地址,即第i行第0列的地址。 行地址a加1(a+1),表示指向下一行;列地址ai加1( ai +1),表示指向下一列第21頁(yè),共43頁(yè)。二維數(shù)組的行指針與列指針i2;j3;i2;j3;注:mn個(gè)元素的二維數(shù)組第22頁(yè),共43頁(yè)。int a34=1,3,5,7,9,11,13,15,17,19,21,23;1357911131517192123a0a1a2aa+1a

7、+2a0a0+1a0+2a0+3行指針列指針第23頁(yè),共43頁(yè)。a代表第0行首地址a+1代表第1行首地址a+2代表第2行首地址1357911131517192123a0a1a2aa+1a+2a0a0+1a0+2a0+3行指針列指針行指針每加1,走一行第24頁(yè),共43頁(yè)。a+i代表行號(hào)為i的行首地址(按行變化)*(a+i)代表什么?1357911131517192123a0a1a2aa+1a+2a0a0+1a0+2a0+3行指針列指針相當(dāng)于ai第25頁(yè),共43頁(yè)。a0代表a00的地址a0+1代表a01的地址a0+2代表a02的地址a0+3代表a03的地址1357911131517192123a0

8、a1a2aa+1a+2a0a0+1a0+2a0+3行指針列指針列指針每加1,走一列第26頁(yè),共43頁(yè)。a1代表誰(shuí)的地址?a1+1代表誰(shuí)的地址?a1+2代表誰(shuí)的地址?a1+3代表誰(shuí)的地址?1357911131517192123a0a1a2aa+1a+2a0a0+1a0+2a0+3行指針列指針第27頁(yè),共43頁(yè)。ai+j代表誰(shuí)的地址?1357911131517192123a0a1a2aa+1a+2a0a0+1a0+2a0+3行指針列指針代表aij的地址*(ai+j)代表什么?代表元素aij*(*(a+i)+j)代表什么?與*(ai+j)等價(jià)第28頁(yè),共43頁(yè)。第29頁(yè),共43頁(yè)。第30頁(yè),共43頁(yè)

9、。第31頁(yè),共43頁(yè)。第32頁(yè),共43頁(yè)。第33頁(yè),共43頁(yè)。動(dòng)態(tài)數(shù)組棧堆靜態(tài)存儲(chǔ)區(qū)常量存儲(chǔ)區(qū)代碼區(qū)動(dòng)態(tài)存儲(chǔ)區(qū)只讀存儲(chǔ)區(qū)低地址區(qū)高地址區(qū)第34頁(yè),共43頁(yè)。 非靜態(tài)的局部變量是分配在內(nèi)存中的動(dòng)態(tài)存儲(chǔ)區(qū)的,這個(gè)存儲(chǔ)區(qū)是一個(gè)稱為棧的區(qū)域 C語(yǔ)言還允許建立內(nèi)存動(dòng)態(tài)分配區(qū)域,以存放一些臨時(shí)用的數(shù)據(jù),這些數(shù)據(jù)需要時(shí)隨時(shí)開(kāi)辟,不需要時(shí)隨時(shí)釋放。這些數(shù)據(jù)是臨時(shí)存放在一個(gè)特別的自由存儲(chǔ)區(qū),稱為堆區(qū)第35頁(yè),共43頁(yè)。 對(duì)內(nèi)存的動(dòng)態(tài)分配是通過(guò)系統(tǒng)提供的庫(kù)函數(shù)來(lái)實(shí)現(xiàn)的,主要有malloc,calloc,free,realloc這4個(gè)函數(shù)。 使用這些函數(shù),要在程序開(kāi)頭將頭文件包含到源程序中。即在用到這些函數(shù)時(shí)應(yīng)當(dāng)用

10、#include 指令把stdlib.h頭文件包含到程序文件中。第36頁(yè),共43頁(yè)。函數(shù)原型為 :void *malloc(unsigned int size); 作用:是在內(nèi)存的動(dòng)態(tài)存儲(chǔ)區(qū)中分配一個(gè)長(zhǎng)度為size的連續(xù)空間(1) malloc函數(shù)例:malloc(100);開(kāi)辟100字節(jié)的臨時(shí)分配域第37頁(yè),共43頁(yè)。注意:指針的基類型為void,即不指向任何類型的數(shù)據(jù),只提供一個(gè)地址如果此函數(shù)未能成功地執(zhí)行(例如內(nèi)存空間不足),則返回空指針(NULL)例:int *p=NULL; p=(int *)malloc(2) 若不清楚相應(yīng)數(shù)據(jù)類型所占字節(jié)數(shù),則 p=(int *)malloc(si

11、zeof(int)第38頁(yè),共43頁(yè)。函數(shù)原型為 :void *calloc(unsigned n,unsigned size); 作用:是在內(nèi)存的動(dòng)態(tài)存儲(chǔ)區(qū)中分配n個(gè)長(zhǎng)度為size的連續(xù)空間,這個(gè)空間一般比較大,足以保存一個(gè)數(shù)組。用calloc函數(shù)可以為一維數(shù)組開(kāi)辟動(dòng)態(tài)存儲(chǔ)空間,n為數(shù)組元素個(gè)數(shù),每個(gè)元素長(zhǎng)度為size。這就是動(dòng)態(tài)數(shù)組。函數(shù)返回指向所分配域的起始位置的指針;如果分配不成功,返回NULL。(2) calloc函數(shù)例:p=calloc(50,4);開(kāi)辟504個(gè)字節(jié)的臨時(shí)分配域,把起始地址賦給指針變量p 第39頁(yè),共43頁(yè)。函數(shù)原型為 :void *free(void *p); 作用:是釋放指針變量所指向的動(dòng)態(tài)空間,使這部分空間能重新被其他變量使用。p應(yīng)是最近一次調(diào)用calloc或malloc函數(shù)時(shí)得到的函數(shù)返回值。(3) free函數(shù)第40頁(yè),共43頁(yè)。函數(shù)原型為:void *realloc(void *p, unsigned int size);如果已經(jīng)通過(guò)mal

溫馨提示

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