C語(yǔ)言程序設(shè)計(jì) 課件 任務(wù)4.2 指針_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì) 課件 任務(wù)4.2 指針_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì) 課件 任務(wù)4.2 指針_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì) 課件 任務(wù)4.2 指針_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì) 課件 任務(wù)4.2 指針_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

C語(yǔ)言程序設(shè)計(jì)基礎(chǔ)與實(shí)踐模塊四編程高級(jí)應(yīng)用任務(wù)4.2指針C語(yǔ)言程序設(shè)計(jì)基礎(chǔ)與實(shí)踐課程組04技能點(diǎn)拓展03技能點(diǎn)詳解02技能點(diǎn)分析目錄CONTENTS任務(wù)4.2指針01問(wèn)題引入05技能點(diǎn)檢測(cè)一問(wèn)題引入現(xiàn)實(shí)生活中,我們總會(huì)碰到很多指示牌,它們的作用是告訴尋路者要找到一個(gè)地方應(yīng)該怎么走,以便我們找到自己的目的地或者所需的東西,比如車(chē)站出口、物品擺放地等等。在程序設(shè)計(jì)中,有時(shí)也需要“指示牌”,告訴程序所需要的數(shù)據(jù)、代碼在哪,以便于更好的調(diào)用數(shù)據(jù)、代碼。那么指針在使用時(shí)我們應(yīng)該注意哪些事項(xiàng)呢?04技能點(diǎn)拓展03技能點(diǎn)詳解02技能點(diǎn)分析目錄CONTENTS01問(wèn)題引入05技能點(diǎn)檢測(cè)任務(wù)4.2指針二技能點(diǎn)分析1.指針概念2.指針運(yùn)算3.指針與數(shù)組學(xué)習(xí)目標(biāo)1.什么是指針?2.如何聲明指針?3.指針的算術(shù)運(yùn)算有哪些?4.什么是指針數(shù)字?如何定義一維指針數(shù)組?學(xué)期預(yù)習(xí)04技能點(diǎn)拓展03技能點(diǎn)詳解02技能點(diǎn)分析目錄CONTENTS01問(wèn)題引入05技能點(diǎn)檢測(cè)任務(wù)4.2指針指針也就是內(nèi)存地址,指針變量是用來(lái)存放內(nèi)存地址的變量。就像其他變量或常量一樣,您必須在使用指針存儲(chǔ)其他變量地址之前,對(duì)其進(jìn)行聲明。指針變量聲明的一般形式為:type*v_name;type是指針的基類(lèi)型,它必須是一個(gè)有效的C數(shù)據(jù)類(lèi)型,v_name是指針變量的名稱(chēng)。用來(lái)聲明指針的星號(hào)*與乘法中使用的星號(hào)是相同的。但是,在這個(gè)語(yǔ)句中,星號(hào)是用來(lái)指定一個(gè)變量是指針。int*intp;/*一個(gè)整型的指針*/double*doup;/*一個(gè)double型的指針*/float*flop;/*一個(gè)浮點(diǎn)型的指針*/char*chp;/*一個(gè)字符型的指針*/三技能點(diǎn)詳解——指針不同數(shù)據(jù)類(lèi)型的指針之間唯一的不同是,指針?biāo)赶虻淖兞炕虺A康臄?shù)據(jù)類(lèi)型不同。例如一個(gè)int型變量inta:編譯器會(huì)根據(jù)變量inta的類(lèi)型int,為其分配4個(gè)字節(jié)地址連續(xù)的存儲(chǔ)空間。假如這塊連續(xù)空間的首地址為0x0048EFAA,那么這個(gè)變量占據(jù)0x0048EFAA~0x0048EFAD這四個(gè)字節(jié)的空間,0x0048EFAA就是變量inta的地址。三技能點(diǎn)詳解——指針三技能點(diǎn)詳解——1指針的算術(shù)運(yùn)算1)取址運(yùn)算符在程序中定義變量時(shí)系統(tǒng)會(huì)為變量在內(nèi)存中開(kāi)辟一段空間,用于存儲(chǔ)該變量的值,每個(gè)變量的存儲(chǔ)空間都有唯一的編號(hào),這個(gè)編號(hào)就是變量的內(nèi)存地址。C語(yǔ)言支持以取址運(yùn)算符“&”獲得變量的地址。&符號(hào)的使用方法:&vary_name;intinta=99;//定義變量intaint*intp=&inta;//定義int類(lèi)型的指針intp,并取變量inta的地址賦值給intp三技能點(diǎn)詳解——1指針的算術(shù)運(yùn)算2)取值運(yùn)算符指針變量存儲(chǔ)的數(shù)值是一個(gè)地址,直接對(duì)地址操作容易出錯(cuò),針對(duì)指針變量的取值并非取出它所存儲(chǔ)的地址,而是間接取得該地址中存儲(chǔ)的值。C語(yǔ)言支持通過(guò)使用一元運(yùn)算符*來(lái)返回位于操作數(shù)所指定地址的變量的值。*符號(hào)使用方法:*指針表達(dá)式。案例如下:通過(guò)上述代碼,最終實(shí)現(xiàn)變量intb的值也是99。其效果等同于intb=inta。intinta=99;//定義變量intaint*intp=&inta;//定義int類(lèi)型的指針intp,并取變量inta的地址賦值給intpintintb=*intp;//定義int型變量intb,并取指針變量p中存儲(chǔ)的變量值賦給intb三技能點(diǎn)詳解——1指針的算術(shù)運(yùn)算3)指針的算術(shù)運(yùn)算C指針是一個(gè)用數(shù)值表示的地址。因此,您可以對(duì)指針執(zhí)行算術(shù)運(yùn)算??梢詫?duì)指針進(jìn)行四種算術(shù)運(yùn)算:++、--、+、-。指針的每一次遞增,它其實(shí)會(huì)指向下一個(gè)元素的存儲(chǔ)單元。指針的每一次遞減,它都會(huì)指向前一個(gè)元素的存儲(chǔ)單元。指針在遞增和遞減時(shí)跳躍的字節(jié)數(shù)取決于指針?biāo)赶蜃兞繑?shù)據(jù)類(lèi)型長(zhǎng)度,比如int型就是4個(gè)字節(jié),char型就移動(dòng)1個(gè)字節(jié)。3)指針的比較指針可以用關(guān)系運(yùn)算符進(jìn)行比較,如==、<和>。如果intp1和intp2指向兩個(gè)相關(guān)的變量,比如同一個(gè)數(shù)組中的不同元素,則可對(duì)intp1和intp2進(jìn)行大小比較。三技能點(diǎn)詳解——1指針的算術(shù)運(yùn)算1)指針與一維數(shù)組定義了指向數(shù)組的指針,則指針可以像使用數(shù)組名一樣,使用下標(biāo)取值法對(duì)數(shù)組中的元素進(jìn)行訪問(wèn),指針還可以通過(guò)“*”符號(hào)訪問(wèn)數(shù)組元素,還可以直接移動(dòng)指針訪問(wèn)數(shù)組中的數(shù)據(jù)。三技能點(diǎn)詳解——2指針與數(shù)組charcha1[6]="hello";//定義一個(gè)字符數(shù)組,長(zhǎng)度為6,hello后還要有一個(gè)/0字符char*chp,t; //定義一個(gè)chp字符指針和字符型變量tchp=cha1; //將數(shù)組地址賦值給指針chpt=chp[4]; //通過(guò)下標(biāo)訪問(wèn)字符數(shù)組中的’o’字符,賦值給字符變量tt=*(p+4)//不移動(dòng)指針,通過(guò)指針運(yùn)算訪問(wèn)數(shù)組元素’o’字符

/***************************************移動(dòng)指針,通過(guò)指針p+4后指向數(shù)組元素’o’字符,*然后通過(guò)*取值運(yùn)算符訪問(wèn)字符****************************************/p=p+4;t=*p;2)指針與二維數(shù)組在二維數(shù)組arr中,arr[0]就表示第一行數(shù)據(jù),arr[1]表示第二行數(shù)據(jù)。arr[0]、arr[1]相當(dāng)于二維數(shù)組中一維數(shù)組的數(shù)組名,指向二維數(shù)組對(duì)應(yīng)行的第一個(gè)元素,arr[0]=&arr[0][0],arr[1]=&arr[1][0]。在二維數(shù)組中,arr+i雖然指向的是該行元素的首地址,但它代表的是整行數(shù)據(jù)元素,只是一個(gè)地址,并不表示某一元素的值。*(arr+i)仍然表示一個(gè)地址,與arr[i]等價(jià)。*(arr+i)+j表示二維數(shù)組元素arr[i][j]的地址,等價(jià)于&arr[i][j],也等價(jià)于arr[i]+j。三技能點(diǎn)詳解——2指針與數(shù)組通過(guò)ptr訪問(wèn)二維數(shù)組arr中的第2行第2列的元素:ptr[1][1]*(ptr[1]+1)*(*(ptr+1)+1)案例4.1.1一維數(shù)組指針/*******************************************內(nèi)容簡(jiǎn)述:在程序中經(jīng)??吹绞褂弥羔槾鏀?shù)組,*因?yàn)樽兞恐羔樋梢赃f增,而數(shù)組不能遞增,數(shù)組*可以看成一個(gè)指針常量。下面的程序遞增變量指*針,以便順序訪問(wèn)數(shù)組中的每一個(gè)元素******************************************/#include

<stdio.h>intmain(){

intarr[]={100,200,300};

inti,*ptr;ptr=arr; /*指針中的數(shù)組地址*/

for(i=0;i<3;i++){printf("地址值:arr[%d]=%p\n",i,ptr);printf("存儲(chǔ)值:arr[%d]=%d\n",i,*ptr);ptr++; /*通過(guò)自增運(yùn)算讓指針指向下一個(gè)位置*/}

return0;}三技能點(diǎn)詳解——案例實(shí)例4.1.2二維數(shù)組指針通過(guò)指針數(shù)組p和一維數(shù)組a構(gòu)成一個(gè)3×2的二維數(shù)組,并為a數(shù)組賦初值2、4、6、8、…。要求先按行的順序輸出此“二維數(shù)組”,然后再按列的順序輸出它。/****************************************內(nèi)容簡(jiǎn)述:利用數(shù)組指針訪問(wèn)二維數(shù)組**************************************/#include

<stdio.h>intmain(){inti,j,a[3][2]={2,4,6,8,10,12},*p[3];//定義一個(gè)指針數(shù)組*p[]

for(i=0;i<3;i++) p[i]=a[i];//利用指針p[i]獲取每行數(shù)組a[i]的地址

for(i=0;i<3;i++){for(j=0;j<2;j++) printf("%4d",p[i][j]);printf("\n");}

for(i=0;i<2;i++){for(j=0;j<3;j++)

printf("%4d",p[j][i]);printf("\n");}}三技能點(diǎn)詳解——案例04技能點(diǎn)拓展03技能點(diǎn)詳解02技能點(diǎn)分析目錄CONTENTS01問(wèn)題引入05技能點(diǎn)檢測(cè)任務(wù)4.2指針?biāo)募寄茳c(diǎn)拓展——1NULL指針在變量聲明的時(shí)候,如果沒(méi)有確切的地址可以賦值,為指針變量賦一個(gè)NULL值是一個(gè)良好的編程習(xí)慣。賦為NULL值的指針被稱(chēng)為空指針。NULL指針是一個(gè)定義在標(biāo)準(zhǔn)庫(kù)中的值為零的常量。在大多數(shù)的操作系統(tǒng)上,程序不允許訪問(wèn)地址為0的內(nèi)存,因?yàn)樵搩?nèi)存是操作系統(tǒng)保留的。然而,內(nèi)存地址0有特別重要的意義,它表明該指針不指向一個(gè)可訪問(wèn)的內(nèi)存位置。但按照慣例,如果指針包含空值(零值),則假定它不指向任何東西。如需檢查一個(gè)空指針,您可以使用if語(yǔ)句,如下所示:if(ptr)/*如果ptr非空,則完成后續(xù)操作*/if(!ptr)/*如果ptr為空,則完成后續(xù)操作*/四技能點(diǎn)拓展——2指向指針的指針指向指針的指針是一種多級(jí)間接尋址的形式,或者說(shuō)是一個(gè)指針鏈。通常,一個(gè)指針包含一個(gè)變量的地址。當(dāng)我們定義一個(gè)指向指針的指針時(shí),第一個(gè)指針包含了第二個(gè)指針的地址,第二個(gè)指針指向包含實(shí)際值的位置。一個(gè)指向指針的指針變量必須如下聲明,即在變量名前放置兩個(gè)星號(hào)。例如,下面聲明了一個(gè)指向int類(lèi)型指針的指針:int**vptr;四技能點(diǎn)拓展——3

無(wú)類(lèi)型指針使用void*修飾的指針。無(wú)類(lèi)型指針指向一塊內(nèi)存,但其類(lèi)型不定,程序無(wú)法根據(jù)這種定義確定為該指針指向的變量分配多少存儲(chǔ)空間,所以若要使用該指針為其他基類(lèi)指針賦值,必須先轉(zhuǎn)換成其他類(lèi)型的指針。void *p1=NULL,*q1;//定義一個(gè)無(wú)類(lèi)型的指針變量int *m1=(int*)p1;//將無(wú)類(lèi)型的指針變量p強(qiáng)制轉(zhuǎn)換為int*型再賦值四技能點(diǎn)拓展——3

案例1

/****************************************在程序中經(jīng)??吹绞褂弥羔槾鏀?shù)組,因?yàn)樽兞?指針可以遞增,而數(shù)組不能遞增,數(shù)組可以看成*一個(gè)指針常量。下面的程序遞增變量指針,以便*順序訪問(wèn)數(shù)組中的每一個(gè)元素***************************************/#include

<stdio.h>intmain(){

intarr[]={100,200,300};

inti,*ptr;ptr=arr; /*指針中的數(shù)組地址*/

for(i=0;i<3;i++){printf("地址值:arr[%d]=%p\n",i,ptr);printf("存儲(chǔ)值:arr[%d]=%d\n",i,*ptr);ptr++; /*通過(guò)自增運(yùn)算讓指針指向下一個(gè)位置*/}

return0;}四技能點(diǎn)拓展——3

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論