




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第十章指針,掌握指針和指針變量的概念;掌握數(shù)組的指針和指針數(shù)組的使用;掌握字符串指針和指向字符串的指針變量的使用;掌握函數(shù)指針和函數(shù)指針的使用;理解指針的概念和使用。指針無疑是C語言最明顯和最令人興奮的特征之一。它增加了語言的力量和靈活性。盡管如此,毫無疑問,指針是C語言最獨(dú)特和最令人興奮的特性之一,它增加了C語言的能力和靈活性。雖然對(duì)初學(xué)者來說,它們看起來有點(diǎn)令人困惑和難以理解,但是一旦掌握了它們,它們將成為強(qiáng)大的工具并且易于使用。指針為程序員提供了許多好處,包括:1)它們?cè)谔幚頂?shù)組和數(shù)據(jù)表時(shí)更有效;2)用于通過函數(shù)變量從一個(gè)函數(shù)返回多個(gè)函數(shù)值;3)使用指向字符串的指針數(shù)組可以節(jié)省內(nèi)存中的數(shù)
2、組存儲(chǔ)空間;4)減少程序的長度和復(fù)雜性;5)加速程序處理速度和減少執(zhí)行時(shí)間,指針為程序員提供了許多好處。它們包括:指針,在處理數(shù)組和數(shù)據(jù)表時(shí)效率更高;指針可用于通過函數(shù)參數(shù)從函數(shù)返回多個(gè)值。對(duì)字符串使用指針數(shù)組可以節(jié)省內(nèi)存中的數(shù)據(jù)存儲(chǔ)空間。指針減少了程序的長度和復(fù)雜性。它們提高了執(zhí)行速度,從而減少了程序執(zhí)行時(shí)間。存儲(chǔ)器被分成單元,這些單元按順序排列。每個(gè)單元都有一個(gè)稱為內(nèi)存地址的數(shù)字,對(duì)內(nèi)存數(shù)據(jù)的訪問是通過該地址進(jìn)行的。高級(jí)語言用變量等高級(jí)概念掩蓋了內(nèi)存單元和地址等低級(jí)概念,因此我們?cè)诰帉懗绦驎r(shí)不必關(guān)心硬件細(xì)節(jié),但內(nèi)存和地址仍然是最基本的概念。存儲(chǔ)單元的最小單位是字節(jié)。1。存儲(chǔ)器的概念,地址:
3、為了訪問存儲(chǔ)器中的存儲(chǔ)單元,它應(yīng)該被編號(hào),這個(gè)數(shù)字被稱為存儲(chǔ)器地址。通過該地址,我們可以訪問由該地址標(biāo)識(shí)的存儲(chǔ)單元。2.地址的概念,變量地址:每個(gè)變量總是在內(nèi)存中占據(jù)幾個(gè)連續(xù)的字節(jié),起始字節(jié)的地址就是變量的地址。2007,存儲(chǔ)單元,10.1指針及其相關(guān)概念,指針:變量的地址稱為變量的指針。許多高級(jí)語言將程序?qū)ο蟮牡刂芬暈橐环N數(shù)據(jù),稱為地址值或指針值。指針變量:如果一個(gè)變量專用于存儲(chǔ)另一個(gè)變量的地址(指針),前者稱為指針變量。換句話說,其值為地址的變量稱為指針變量,簡稱指針。當(dāng)變量的地址存儲(chǔ)在指針變量中時(shí),我們可以說指針指向變量。變量的訪問方法:直接訪問和間接訪問。10.2變量指針和指向變量的指
4、針變量,1。指針變量的定義,如: int *ptr1,*ptr2,I,j,k;double * q *,s,x,y,z;char *ch1,ch2,ch310指針變量的類型:描述指針指向的變量的類型。聲明指針指向的變量類型。鍵入* variables _ name定義指針變量時(shí)要注意以下問題:變量名ptr2前面的“*”不能省略,如果寫為int *ptr1,ptr 2;那么ptr2被定義為整數(shù)變量,而不是整數(shù)指針變量。ptr2定義中的“*”是一個(gè)整數(shù)變量,表示定義的變量是指針變量,但指針變量名稱是ptr1和ptr2,而不是*ptr1和*ptr2。Int *表示聲明一個(gè)整數(shù)指針。點(diǎn)變量名是ptr1
5、,ptr2,但不是*ptr1,*ptr2。指針變量只能指向定義中指定類型的變量。這個(gè)指定的類型稱為指針變量的“基本類型”。指針的類型必須與指針?biāo)赶虻淖兞康念愋拖嗥ヅ?。該類型稱為指針的基本類型。例如,上面示例中的ptr1和ptr2只能指向整數(shù)變量,但不能指向?qū)崝?shù)或字符變量。它們的“基本類型”是相同的,它們都是整數(shù)。定義指針變量后,不確定變量指向何處。也就是說,這個(gè)變量的值是不確定的。在引用指針變量之前指向變量并不重要。第二,指針操作變量指針的操作,指針操作符(,我們也可以用這個(gè)方法來改變變量:* ptr=15相當(dāng)于i=15可以看出,指針運(yùn)算符“*”可以引用一個(gè)變量。例如,當(dāng)ptr指向變量I時(shí),
6、*ptr等于I。當(dāng)ptr的指針指向有效的I時(shí),則* ptr等于I。* ptr,pi=,將指針變量的值賦給另一個(gè)指針變量。例如:int i,*pa,* pbPa=,為指針變量分配一個(gè)符號(hào)常量NULL。描述:NULL是一個(gè)空指針,表示指針變量的值沒有意義。目的是避免非法引用尚未初始化的指針變量??罩档亩x在“stdio.h”中。例如:int * pipi=空;描述:定義指針變量時(shí),可以立即為指針變量分配一個(gè)地址值,這是指針變量的初始化。指針變量的初始化也是指針的賦值。例如:float flt,*f_ptr=,指針變量之間的賦值和引用應(yīng)該確保相同的基類型。如果定義:int *p,I;float *q
7、,x;然后:q=,指針操作用于移動(dòng)指針,指針加減(,存儲(chǔ)單元的大小是指針的數(shù)據(jù)類型所需的內(nèi)存大小。例如:ptr n(指針ptr,n是整數(shù))由這個(gè)指針值表示的存儲(chǔ)單元的地址是ptr n*d(其中d是指針?biāo)赶虻淖兞康臄?shù)據(jù)類型所占用的存儲(chǔ)字節(jié)數(shù)),也就是說,指針已經(jīng)移動(dòng)了n個(gè)元素。如果ptr指向一個(gè)數(shù)組am,ptr i指向數(shù)組A的第一個(gè)數(shù)組元素,也就是ai。指針到指針的加法是沒有意義的,所以指針到指針的加法是不必要的。同樣,指針之間沒有乘法或除法。指針到指針的減法運(yùn)算要求兩個(gè)被減去的指針屬于同一類型,并且結(jié)果是一個(gè)整數(shù),它指示兩個(gè)指針之間的數(shù)據(jù)數(shù)量。計(jì)算結(jié)果值的公式為:ptr1-ptr2=(ptr
8、1值-ptr2值)/指針數(shù)據(jù)類型占用的字節(jié)數(shù),例如:int *ptr1,*ptr2,*ptr3,x;int ary5=2,4,8,16,32;ptr1=,x的值是3,2指針的-,=,-=運(yùn)算,并且,=:是將指針移動(dòng)到下一個(gè)或幾個(gè)存儲(chǔ)位置。-,-=:是將指針移動(dòng)到前一個(gè)或幾個(gè)存儲(chǔ)位置。例如:int *ptr,ary5=2,4,6,8,10;ptr=aryptr=3;ptr-;想想看:ptr和(*ptr)有什么區(qū)別?指針表達(dá)式,像其他變量一樣,指針變量也可以用在表達(dá)式中。像其他變量一樣,指針變量可以用在表達(dá)式中。例如,如果p1和p2是正確聲明和初始化的指針,那么下面的語句是有效的。y=* p1 *
9、 * p2/等于(* P1)* *(p2)總和=總和* P1;z=5 *-* p2/* P1;/等于5 *(p2-*)/(* P1)* p2=* p2 10;以下是錯(cuò)誤的。z=5 *-* p2/* P1;P1/p2或p1*p2或p1/3或p1 p2。第三,指針變量被用作函數(shù)參數(shù),并且指針可以被用作函數(shù)參數(shù),這在您想要通過調(diào)用函數(shù)來改變主音函數(shù)的參數(shù)值時(shí)非常有用。例如,編寫一個(gè)用指針變量交換兩個(gè)數(shù)字的函數(shù),void swap(int *p1,int * p2);main() int x1=100,x2=200printf(x1=%d,x2=%dn,x1,x2);swap(,void swap(i
10、nt *p1,int * p2)int temp;temp=* p1* p1=* p2* p2=溫度;說明在交換過程中存儲(chǔ)單元內(nèi)容的變化。想想看:如果一個(gè)函數(shù)的參數(shù)使用整數(shù)變量而不是指針,值的交換能實(shí)現(xiàn)嗎?為什么?通過函數(shù)調(diào)用獲得要改變的n個(gè)值的方法:在主音函數(shù)中設(shè)置n個(gè)變量,并將這n個(gè)變量的地址傳遞給被調(diào)用函數(shù)的參數(shù)指針;通過參數(shù)指針變量和值運(yùn)算符“*”更改這n個(gè)變量的值;回到主音功能,你可以用這些變量改變值。注意:您不能試圖通過更改指針參數(shù)的值來更改指針參數(shù)的值。例如,前面例子中的交換函數(shù)不能寫成int * temptemp=p1p1=p2;p2=溫度。10.3數(shù)組指針和指向數(shù)組的指針變量
11、數(shù)組的常量指針和指向數(shù)組的指針變量,即概念,int a5數(shù)組指針:是數(shù)組的起始地址。a:p=a;相當(dāng)于p=,指針變量p指向數(shù)組元素A0,而pi,a i和b25=2002.使用指針方法引用數(shù)組元素,如果:int a10,*p,I;p=a;那么:*(p i)和*(a i)表示元素ai *(a 3)=45;*(P3)=45;*(p i)也可以寫成p i,而* (pi)、*(a i)、a i和pi是等價(jià)的,都表示數(shù)組a的第11個(gè)元素ai。方法2:通過數(shù)組名稱計(jì)算數(shù)組元素的地址,并找出元素的值。(按數(shù)組名稱和整數(shù))main() int a10=54,65,8,2,3,56,8,21,57,98,I;對(duì)于
12、(I=0;i10printf(M,*(a)I);方法1:下標(biāo)方法。(通過下標(biāo))main() int a10=54,65,8,2,3,56,8,21,57,98,I;對(duì)于(I=0;i10(一)printf(M,ai);方法3:使用指針變量指向數(shù)組元素(通過指針)main () inta10=54,65,8,2,3,56,8,21,57,98,* p,I;p=a;對(duì)于(printf(“n”),I=0;i10(i ) printf(M,* p);在以上三種方法中,使用指針變量是最有效的。描述:指針變量和數(shù)組名稱之間的差異。指針變量是一個(gè)地址變量,它的內(nèi)容可以在程序運(yùn)行過程中改變。數(shù)組名是一個(gè)地址常量,一旦被定義,它的地址就不能改變。指針變量是地址變量,數(shù)組名是地址常量。例如:int I *,p,a6;那么:p=,你不能給常數(shù)賦值。當(dāng)用指針變量編程時(shí),應(yīng)該特別注意指針變量的當(dāng)前值,例如,通過指針變量輸入和輸
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 護(hù)理學(xué):請(qǐng)護(hù)工的三大重要理由
- 江西省吉安永新縣聯(lián)考2025年初三下五校聯(lián)考英語試題含答案
- 天津市津南區(qū)2025年初三高中數(shù)學(xué)試題競賽模擬(二)數(shù)學(xué)試題含解析
- 團(tuán)風(fēng)縣2025年五下數(shù)學(xué)期末質(zhì)量檢測試題含答案
- 江西省鷹潭市達(dá)標(biāo)名校2025年初三5月檢測試題(三)英語試題含答案
- 上海師范大學(xué)《文化遺產(chǎn)學(xué)理論教學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 臺(tái)州科技職業(yè)學(xué)院《文學(xué)概論(2)》2023-2024學(xué)年第二學(xué)期期末試卷
- 遼寧省丹東市第六中學(xué)2025屆初三下學(xué)期中考考前質(zhì)量檢測試題三(5月模擬)物理試題含解析
- 江西楓林涉外經(jīng)貿(mào)職業(yè)學(xué)院《俄語》2023-2024學(xué)年第一學(xué)期期末試卷
- 長沙職業(yè)技術(shù)學(xué)院《景觀快題訓(xùn)練》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025年高考作文備考之十大熱點(diǎn)主題及寫作導(dǎo)引
- 2025年重慶中考押題道德與法治試卷(一)(含答案)
- 2025屆上海市浦東新區(qū)高三二模英語試卷(含答案)
- 開曼群島公司法2024版中文譯本(含2024年修訂主要內(nèi)容)
- 【MOOC】航空燃?xì)鉁u輪發(fā)動(dòng)機(jī)結(jié)構(gòu)設(shè)計(jì)-北京航空航天大學(xué) 中國大學(xué)慕課MOOC答案
- 工程變更通知單ECN模板-20220213
- 裝修行業(yè)資源整合主材合作協(xié)議
- 儲(chǔ)油罐施工專業(yè)技術(shù)方案
- (完整版)沖壓模具設(shè)計(jì)畢業(yè)設(shè)計(jì).doc
- 橡膠接頭、防水套管、伸縮器、伸縮接頭、傳力接頭、補(bǔ)償器、鴨嘴閥等管道工程圖形符號(hào)大全
- 員工工作調(diào)動(dòng)單
評(píng)論
0/150
提交評(píng)論