《地址和指針》PPT課件.ppt_第1頁(yè)
《地址和指針》PPT課件.ppt_第2頁(yè)
《地址和指針》PPT課件.ppt_第3頁(yè)
《地址和指針》PPT課件.ppt_第4頁(yè)
《地址和指針》PPT課件.ppt_第5頁(yè)
已閱讀5頁(yè),還剩14頁(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、第七章地址和指針,主要內(nèi)容 地址和指針的概念 指針變量的定義 給指針變量賦值 對(duì)指針變量的操作 指針在函數(shù)方面的應(yīng)用,7.1 地址和指針的概念,7.1.1地址和指針的概念 1.“地址”的概念 在計(jì)算機(jī)里每一個(gè)存儲(chǔ)數(shù)據(jù)的存儲(chǔ)單元也都必須具有一個(gè)唯一的“地址”,以示區(qū)別不同存儲(chǔ)單元的位置。 “地址”是用于確定對(duì)象的位置,存儲(chǔ)的數(shù)據(jù)是反映具體的內(nèi)容。 2.存儲(chǔ)單元“地址”的表示 在計(jì)算機(jī)中存儲(chǔ)數(shù)據(jù)的存儲(chǔ)單元,是根據(jù)存儲(chǔ)數(shù)據(jù)類型的不同而不同。 int a; a占2個(gè)單元分別為1012,1013 float b;b占4個(gè)單元,10141017 char c ;c占1個(gè)單元,1018,a,b,c,XXXX

2、X XXXXX,XXXXX XXXXX,XXXXX XXXXX,XXXXX,3.“指針”的概念 在計(jì)算機(jī)中用戶獲取某一地址存儲(chǔ)單元內(nèi)的數(shù)據(jù)有兩個(gè)方式: 第一種方式是直接訪問(wèn):根據(jù)變量名,直接獲取變量存儲(chǔ)單元中的數(shù)據(jù)。 如:printf(“%d”,a); 第二種方式是間接訪問(wèn):知道存儲(chǔ)單元的“地址”,再根據(jù)已知地址獲取存儲(chǔ)單元中的數(shù)據(jù) 指針變量:用于存儲(chǔ)其他變量的地址的變量。只能存儲(chǔ)地址,不能存儲(chǔ)普通數(shù)據(jù),1012,1012,變量a,1012 1013,指針變量p,2002,指針變量p,2002,7.1.2為什么使用指針 例7.1欲想調(diào)用fun函數(shù),計(jì)算出兩個(gè)數(shù)相加和相減的值,然后在main函數(shù)

3、中顯示結(jié)果。 fun(int x,int y) int add=0,sub=0; add=x+y; sub=x-y; main() int a,b,add=0,sub=0; scanf(“%d%d”,例7.2 fun(int x,int y,int *padd,int *psub) *padd=x+y; *psub=x-y; main() int a,b,add=0,sub=0; scanf(“%d%d”,通過(guò)指針可以非常方便地實(shí)現(xiàn)在調(diào)用函數(shù)時(shí)修改或傳回多個(gè)數(shù)值,8,5,原值0新值13,原值0新值3,main 函數(shù) a,b,add,sub,變量add的地址是1001,變量sub的地址是1001

4、,8,5,1001,2001,Fun函數(shù)x,y,指針變量 padd,指針變量 psub,調(diào)用fun函數(shù)時(shí),0,13,1001,add,調(diào)用前,調(diào)用后,1001,7.2指針變量的定義和指針變量的基類型,7.2.1指針變量的定義和指針變量的基類型 定義指針變量的一般形式如下: 類型名指針變量名1,指針變量名2,.; “*”說(shuō)明符用來(lái)說(shuō)明所定義的變量是指針變量。 例如:int *pi,*pj;說(shuō)明了pi和pj是兩個(gè)指向整型變量的指針,也就是說(shuō)變量pi和pj中只能存放int類型變量的地址。這時(shí)稱int是指針變量pi和pj的基類型。 double *pd; 定義了一個(gè)指向雙精度類型變量的指針。 char

5、 *s1,s2;定義了一個(gè)指向字符型變量的指針和一個(gè)字符變量 int *p;定義了一個(gè)指向指針的指針變量p。該指針變量p只能存放基類型為int類型的指針變量的地址,2000,1010,5,1010,a,q,2000,2050,p,7.2.2 指針變量的基類型的作用 在C語(yǔ)言中,不同的數(shù)據(jù)類型變量系統(tǒng)為它們開(kāi)辟的存儲(chǔ)空間的字節(jié)數(shù)是不同的。int類型的數(shù)據(jù)存儲(chǔ)空間是2個(gè)字節(jié), float類型的數(shù)據(jù)存儲(chǔ)空間是4個(gè)字節(jié), char類型的數(shù)據(jù)存儲(chǔ)空間是1個(gè)字節(jié)。 系統(tǒng)表示每一個(gè)存儲(chǔ)空間的地址時(shí),是取該存儲(chǔ)空間的第1個(gè)字節(jié)的地址作為該變量存儲(chǔ)空間的地址。根據(jù)指針變量p中存放的“地址”,只能尋找到變量a第1

6、個(gè)字節(jié)的存儲(chǔ)空間,它并不是變量a的原值,因?yàn)樽兞縜原值是通過(guò)2個(gè)字節(jié)來(lái)數(shù)據(jù)。 例int *p; p,1012,變量a,1012 1013,指針變量p,2002,7.3給指針變量賦值,7.3.1使指針指向一個(gè)對(duì)象 1.通過(guò)求地址運(yùn)算符()把一個(gè)變量的地址賦給指針變量 “”是求地址運(yùn)算符,該運(yùn)算符為單目運(yùn)算符,用于求變量的地址,且該變量必須為內(nèi)存變量。 例如:int k=1,j=2,*q1,*q2,*p; float x=4.5; q1= NULL是在stdio.h頭文件中定義的預(yù)定義符,因此使用NULL時(shí),應(yīng)該在程序的前面應(yīng)加上預(yù)定義命令行:#include “stdio.h,7.4 對(duì)指針變量

7、的操作,7.4.1通過(guò)指針或地址引用一個(gè)存儲(chǔ)單元 當(dāng)指針變量中存放了一個(gè)確切的地址值時(shí),通過(guò)指針可以用“間接運(yùn)算符”()來(lái)引用該地址所代表的存儲(chǔ)單元。 1.在賦值號(hào)右邊由“*”運(yùn)算符和指針變量組成的表達(dá)式,代表指針?biāo)复鎯?chǔ)單元的內(nèi)容。 例如:int *p,i=10,j; p,例7.3指針指向三個(gè)變量,通過(guò)指針運(yùn)算選出數(shù)值最小的那個(gè)數(shù)并打印出來(lái)。 main() int a,b,c,min,*pa,*pb,*pmin; pa=,7.4.2指針(變量)的運(yùn)算 1.指針的移動(dòng) 指針的移動(dòng)就是指當(dāng)指針指向一串連續(xù)的存儲(chǔ)單元時(shí),對(duì)指針變量加上或減去一個(gè)整數(shù)時(shí),結(jié)果是指針了鄰近的存儲(chǔ)單元,使指針變量中存放的

8、地址值發(fā)生了變化。 當(dāng)對(duì)指針變量加、減一個(gè)整數(shù)時(shí),數(shù)字1、2并不代表1個(gè)字節(jié),2個(gè)字節(jié),而是代表1個(gè)存儲(chǔ)單元,2個(gè)存儲(chǔ)單元。 除此之外,不允許對(duì)指針進(jìn)行乘、除,也不允許對(duì)兩個(gè)指針加法運(yùn)算,也不允許對(duì)指針加、減一個(gè)實(shí)型的常量。 2.指針的比較 比較兩個(gè)指針實(shí)質(zhì)上是比較兩個(gè)指針變量中存放的地址值的大小。 當(dāng)多個(gè)指針指向一串連續(xù)指向一串連續(xù)的存儲(chǔ)單元時(shí),指針比較才有意義,7.5指針與一維數(shù)組,利用地址和指針訪問(wèn)數(shù)組元素 數(shù)組名、元素地址及指針的關(guān)系 (1)數(shù)組名代表著這個(gè)數(shù)組所占連續(xù)存儲(chǔ)空間的起始地址。數(shù)組名是一個(gè)地址常量。 (2)每個(gè)數(shù)組元素都是數(shù)組這個(gè)集合中的一分子,由于數(shù)組所占地址空間是連續(xù)的

9、,通過(guò)數(shù)組名這個(gè)首地址就可以找到數(shù)組中的所有元素;每個(gè)數(shù)組元素都可以看作是一個(gè)帶下標(biāo)的變量,它完全可以像普通變量一樣進(jìn)行求地址運(yùn)算。 x+1等價(jià)于是非法,因?yàn)閍是常量,通過(guò)數(shù)組首地址訪問(wèn)數(shù)組元素 int x10,i x+0 等價(jià)于 表示數(shù)組x中的元素可以有以下四種形式: xi *(x+i) *(p+i) pi,7.6 指針與二維數(shù)組,二維數(shù)組與一維數(shù)組及指針的關(guān)系 1.二維數(shù)組是由一維數(shù)組嵌套組成的 2.二維數(shù)組名和一維數(shù)組名是基類型不同的地址常量 int a34,*p a是二維數(shù)組的首地址;a0是第0行元素的首地址; 指針變量pr是一個(gè)行指針,它可以指向包含4個(gè)整型元素的一維數(shù)組,通過(guò)地址引

10、用二維數(shù)組元素 int a34,i,j; 通過(guò)地址引用二維數(shù)組元素的常見(jiàn)形式有: (1)*(ai+j) (2)*(*(a+i)+j) (3)(*(a+i)j 通過(guò)指針數(shù)組引用二維數(shù)組元素 int a34,*pa3,i; pa前面帶有*號(hào),說(shuō)明數(shù)組中的每個(gè)元素都是基類型為整型的指針。所以pa為指針數(shù)組。 (1)paij 等價(jià)于aij (2)*(pai+j) 等價(jià)于*(ai+j) (3)*(*(pa+i)+j) 等價(jià)于*(*(a+i)+j) (4)(*(pa+i)j 等價(jià)于(*(a+i)j,7.7動(dòng)態(tài)存儲(chǔ)分配,動(dòng)態(tài)存儲(chǔ)分配的函數(shù)提供用戶選用。 void *malloc(unsigned int k

11、)動(dòng)態(tài)分配存儲(chǔ)空間大小為k個(gè)字節(jié)并返回首字節(jié)地址。 例:int *pn=malloc(sizeof(int); void *calloc(unsigned int n,unsigned int k)動(dòng)態(tài)分配存儲(chǔ)空間大小為n*k個(gè)字節(jié)并返回首字節(jié)地址。 例:int *pa=calloc(10,sizeof(double); void realloc(void *ptr,unsigned int k)動(dòng)態(tài)分配存儲(chǔ)空間大小為k個(gè)字節(jié)并返回首字節(jié)址,同時(shí)把ptr把指向的動(dòng)態(tài)存儲(chǔ)空間的內(nèi)容復(fù)制到新分配的動(dòng)態(tài)存儲(chǔ)空間,該函數(shù)調(diào)用的返回值通常也賦給ptr所對(duì)應(yīng)的實(shí)參指針。 例:pa=realloc(pa,20*sizeof(double); 動(dòng)態(tài)釋放函數(shù) void free(void *ptr)把ptr所指向的動(dòng)態(tài)存儲(chǔ)空間釋放掉。 例:free(pa) 這些函數(shù)在stdlib.h頭文件中,P152例51 #include “std

溫馨提示

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