版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度企業(yè)網(wǎng)絡(luò)安全解決方案采購(gòu)合同
- 《用于硅太陽(yáng)能電池黑暗中產(chǎn)電的NIR長(zhǎng)余輝發(fā)光材料的研究》
- 《廣西南丹白褲瑤民族服飾研究》
- 《我國(guó)證券市場(chǎng)有效性分析》
- 2024年房產(chǎn)完全轉(zhuǎn)讓合同
- 2024年擔(dān)保合同范本
- 2024年摩托車(chē)回購(gòu)合同模板
- 淘寶店長(zhǎng)招聘面試題與參考回答2025年
- 2024年度假屋預(yù)租合同
- 2024年換熱站施工合同
- 降低患者外出檢查漏檢率-品管圈課件
- 五年級(jí)上冊(cè)生命安全教育全冊(cè)教案
- 2024年中國(guó)煙花鞭炮市場(chǎng)調(diào)查研究報(bào)告
- 第二單元 成長(zhǎng)的時(shí)空(知識(shí)清單)-【上好課】2024-2025學(xué)年六年級(jí)道德與法治全一冊(cè)同步課堂(統(tǒng)編版五四制2024)
- -流體力學(xué)-流體力學(xué)基本方程名師公開(kāi)課獲獎(jiǎng)?wù)n件百校聯(lián)賽一等獎(jiǎng)?wù)n件
- 一線員工技能評(píng)定管理辦法
- 湖北華師大一附中2024-2025學(xué)年度10月月考高三英語(yǔ)試題
- 單元主題-生物體的結(jié)構(gòu)層次教學(xué)設(shè)計(jì)
- 三年級(jí)數(shù)學(xué)(上)計(jì)算題專項(xiàng)練習(xí)附答案集錦
- 2024公安機(jī)關(guān)人民警察高級(jí)執(zhí)法資格考試題(解析版)
- 2024年國(guó)家公務(wù)員考試行測(cè)真題及答案(完整版)
評(píng)論
0/150
提交評(píng)論