C語(yǔ)言程序設(shè)計(jì) 教案 第11章 指針高級(jí)應(yīng)用_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì) 教案 第11章 指針高級(jí)應(yīng)用_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì) 教案 第11章 指針高級(jí)應(yīng)用_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì) 教案 第11章 指針高級(jí)應(yīng)用_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì) 教案 第11章 指針高級(jí)應(yīng)用_第5頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡(jiǎn)介

授課題目:第11章指針高級(jí)應(yīng)用

教學(xué)時(shí)數(shù):|4學(xué)時(shí)|主要授課章節(jié)第11章

教學(xué)目的、要求:

了解指針的指針、二級(jí)指針概念,二級(jí)指針的指向變化情況。

理解指針數(shù)組、數(shù)組指針,指針函數(shù)、函數(shù)指針的區(qū)別與聯(lián)系,理解指針

與二維數(shù)組的關(guān)系。

掌握上述復(fù)雜指針的應(yīng)用方法,初步應(yīng)用復(fù)雜指針進(jìn)行程序編寫。

教學(xué)重點(diǎn):

指針數(shù)組數(shù)組指針,指針函數(shù)的指向變化睛況________________________

教學(xué)難點(diǎn):

指針函數(shù),二級(jí)指針的參數(shù)傳遞過程

教學(xué)方法和手段:

講授法、程序演示等,借助于現(xiàn)代教學(xué)設(shè)施設(shè)備,案例教學(xué),輔以程序演示,

再現(xiàn)實(shí)驗(yàn)結(jié)果,有效地調(diào)動(dòng)學(xué)生的學(xué)習(xí)積極性,促進(jìn)學(xué)生的積極思考,激發(fā)學(xué)生

的潛能。

教學(xué)內(nèi)容與教學(xué)設(shè)計(jì):

案例教學(xué)設(shè)計(jì)概況:根據(jù)案例程序》分析程序的所涉及到指針的應(yīng)用情況、

包括指針在二維數(shù)組中如何進(jìn)行參數(shù)傳遞,程序的語(yǔ)法結(jié)構(gòu)、以及算法的流程結(jié)

構(gòu),字符數(shù)組的使用情況》通過程序分析,觀察程序的結(jié)果情況,掌握二級(jí)指針

在數(shù)組與函數(shù)中的應(yīng)生情況,搞懂指針參數(shù)的地址傳遞方法,并應(yīng)用二級(jí)指針進(jìn)

行編程。

教學(xué)內(nèi)容與過程:

二級(jí)指針的概念:

指針的指針最終存儲(chǔ)的是變量,中間指針存儲(chǔ)的是變量的地址,外面指針存儲(chǔ)

的是變量地址的地址。

結(jié)合案例11-1進(jìn)行分析總結(jié):

案例分析總結(jié):

**q存儲(chǔ)內(nèi)容就是X,所以輸出的就是x的值10,輸出語(yǔ)句第三行與第四行代表同

一含義都是X的地址,若果相同,因?yàn)閜指針就是指向X的,但是輸出語(yǔ)句第二行

&P,代表的是q指針的指向,是P的地址,是一個(gè)間接指針,存儲(chǔ)的是變量X地址

的地址。結(jié)果與后面兩行不同。通過上面案例得b結(jié)論,一級(jí)指針都是存儲(chǔ)的是

變量的地址,二級(jí)指針存儲(chǔ)的是變量地址的地址。

指針與二維數(shù)組的關(guān)系

二維數(shù)組的各個(gè)元素在內(nèi)存中是按行連續(xù)存放的,存放方式與一維數(shù)組并

無(wú)區(qū)別。

行地址:二維數(shù)組被看作元素為一維數(shù)組的一維數(shù)組。

即a被看做由a[0]、a[l]和a[2]組.成。其中:

?a指向a[0]

?a+1指向a[l]

?。+2指向@[2]

列地址:a[0]+0,a[O]+l及a[0]+2所表示的地址,被稱為列地址

表達(dá)式“*行地址”將獲得一個(gè)一維數(shù)組,C語(yǔ)言中,用一維數(shù)組首元素的

地址表示一維數(shù)組,因此“*行地址”的結(jié)果依然是一個(gè)地址。

指針方式訪問二維數(shù)組:

行列地址作為指針使用時(shí),行地址即為行指針,指向一個(gè)一維數(shù)組;列地

址即為列指針,用于指向一維數(shù)組中的具體元素。

對(duì)于任意的二維數(shù)組a,訪問數(shù)組元素的常見等價(jià)表達(dá)式有三種:

1、a[i][j](下標(biāo)法)

2、*(a[i]+j)

3、*(*(a+i)+j)(指針法)

二級(jí)指針作為函數(shù)的參數(shù)應(yīng)用分析:案例11-3

#include<stdio.h>

inta=10;

intb=100;

int*q;

voidfunc(int**p)//2

(

printf(Hfunc:&p=%d.p=%d\nn,&p.p);//note:3

*p=&b;

printf("func:&p越d,p二/d\n”,&p,p);//note:4

)

intmain()

{

printfC^a^d,&b或d,&q二%d\n”,&a,&b,&q);

q=&a;

printf(,r*q=%d,q=%d,&q=%d\n",*q,q,&q);//note:2

func(&q);

printf("*q=%d,q=%d,&q二%d\n",*q,q,&q);//note:5

return0;

)

案例分析總結(jié):傳了指針q的地址(二級(jí)指針**p)到函數(shù),所以二級(jí)指針拷貝(拷貝

的是P,一級(jí)指針中拷貝的是q所以才有問題),(拷貝了指針但是指針內(nèi)容也就是

指針?biāo)赶虻牡刂肥遣蛔兊?所以它還是指向一級(jí)指針q(*p=q)o在這里無(wú)論

拷貝多少次,它依然指向q,那么*p=&b;自然的就是q=&b;了。

利用二級(jí)指針進(jìn)行空間申請(qǐng)、分配

案例11-4二級(jí)指針申清存儲(chǔ)空間申請(qǐng)、分配案例:

二級(jí)指針作為參數(shù)比較常見的是,定義了一個(gè)指針MyClass*ptr=NULL,在函數(shù)

內(nèi)對(duì)指針賦值*ptr初a」oc(...),函數(shù)結(jié)束后指針依然有效.這個(gè)時(shí)候就必須要

用二級(jí)指針作為參數(shù)func(MyClass**p,...)

指針數(shù)組與二維數(shù)組的關(guān)系

指針數(shù)組落腳點(diǎn)是指鑰,先結(jié)合數(shù)組,然后結(jié)合指針,相當(dāng)于數(shù)組的每一個(gè)元素

為指針,指針數(shù)組與二維數(shù)組具有一定的關(guān)系,一般情況指針數(shù)組,相對(duì)于二維

數(shù)組來說,列元素規(guī)模等同于二維數(shù)組的列。

結(jié)合案例11-5進(jìn)行分析

數(shù)組指針與二維數(shù)組的關(guān)系

inta[3][4]={{10,11,12,13},{20,21,22,23},{30,31,32,33}},*p;p=a;(x)

其原因就是二維數(shù)組名是指向行的,p與a的對(duì)象性質(zhì)不同,或者說二者不是同一

級(jí)指針。C語(yǔ)言可以通過定義行指針的方法,使得一個(gè)指針變量與二維數(shù)組名具

有相同的性質(zhì)。行數(shù)組指針的定義方法如下:

數(shù)據(jù)類型(*指針變量名)[二維數(shù)組列數(shù)];

例如,對(duì)上述a數(shù)組,行數(shù)組指針定義如下:

int(*p)[4];

它表示,數(shù)組*P有4個(gè)int型元素,分別為(*p)[0],(*p)[1]x(*p)[2]、(*p)[3],

亦即p指向的是有4個(gè)int型元素的一維數(shù)組,即p為行指針,此時(shí),可用如下方式

對(duì)指針P賦值:P=a;〃p=&a[0][0]

數(shù)組指針與二維數(shù)蛆對(duì)應(yīng)關(guān)系的案例如下11-6:

int(*a)[3];就是一個(gè)數(shù)組指針。

源程序代碼如11-6所示

#include<stdio.h>

intmain()

{

inta[4][3]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}};

int(*b)[3];〃數(shù)組指針,行指針,規(guī)定了每行的元素的個(gè)數(shù)

int*c[4];//指針數(shù)組,相當(dāng)于有4個(gè)指針,對(duì)應(yīng)二維數(shù)組每行的首地址

inti=0,j=0;

b=a;〃自己用二維數(shù)組數(shù)組名進(jìn)行初始化

指針與數(shù)組關(guān)系總結(jié)

指針與數(shù)組的關(guān)系總結(jié):

數(shù)組參數(shù)等效的指針參數(shù)

一維數(shù)組chara[30]指針char*a;

指針數(shù)組char*a[30]指針char**a;

二維數(shù)組chara[10][30]=>(行指針)char(*a)[30];

二維數(shù)組chara[10][30]==》指針數(shù)組char*a[10];

指針函數(shù)

指針函數(shù)是指帶指針的函數(shù),本質(zhì)是一個(gè)函數(shù)返回一個(gè)指定類型的指針。

類型標(biāo)識(shí)符*函數(shù)名(參數(shù)表)

int*f(x,y);

首先它是一個(gè)函數(shù),只不過這個(gè)函數(shù)的返回值是一個(gè)地址值。函數(shù)返回值必須用

同類型的指針變量來接受,也就是說,指針函數(shù)一定有函數(shù)返回值,而且,在主

調(diào)函數(shù)中,函數(shù)返回值必須賦給同類型的指針變量。

表不:

float*fun(inta);

float*p;

指針函數(shù)的應(yīng)用11-7

函數(shù)指針:

函數(shù)指針是指向函數(shù)的指針變量,即本質(zhì)是一個(gè)函數(shù)指針變量。

int(*f)(intx;;/*聲明一個(gè)函數(shù)指針*/

f=func;/*將func函數(shù)的首地址賦給指針f*/

指向函數(shù)的指針包含了函數(shù)的地址的入口地址,可以通過它來調(diào)用函數(shù)。

聲明格式如下:

類型說明符(*函數(shù)名)(參數(shù))

其實(shí)這里不能稱為函數(shù)名,應(yīng)該叫做指針的變量名。這個(gè)特殊的指針指向一個(gè)返

回整型值的函數(shù)。函數(shù)指針的聲明和它指向函數(shù)的聲明保持一致,個(gè)數(shù)一致,類

型一致C

指針名和指針運(yùn)算符外面的括號(hào)改變了默認(rèn)的運(yùn)算符優(yōu)先級(jí)。如果沒有圓括號(hào),

就變成了一個(gè)返回整型指針的函數(shù)的原型聲明。

例如:

void(*fptr)();

voidFunction();

把函數(shù)的地址賦值給函數(shù)指針,可以采用下面兩種形式:

fptr=&Function;

fptr二Function;

取地址運(yùn)算符不是必需的,因?yàn)閱螁我粋€(gè)函數(shù)標(biāo)

二級(jí)指針作為函數(shù)的參數(shù)傳遞案例解析11-8-9-10

指針與字符串經(jīng)典案例,多個(gè)字符串的排序案例11-11將單詞one,two,three,

four,five等5個(gè)不同的單詞按照字典的排序規(guī)則進(jìn)行排序,然后輸出排序后的

結(jié)果。每個(gè)單詞獨(dú)占一行輸出。

案例解析:本案例需要使用到字符串的排序,本案例選擇排序,注意c語(yǔ)言沒有

字符串的直接比較,需要調(diào)用字符串的專門的比較函數(shù)strcmp函數(shù),進(jìn)行比較,

根據(jù)返回值》0,說明前面比后者大。n=sizeof(s)/sizeof(char*);這條語(yǔ)句是

求解字符串的個(gè)數(shù),s為指針數(shù)組,求解它所占住的空間數(shù)除以每個(gè)指針?biāo)嫉?/p>

空間數(shù),其結(jié)果就是數(shù)組元素的真實(shí)個(gè)數(shù)。

#include<stdio.h>

#include<string.h>

voidsort(char*p[],intn)/*采用的是選擇排序,指針數(shù)組作為函數(shù)的形

參*/

{inti,J,k;

p[k]=p[i];

p[i]=temp;

)

)

}

intmain()

{char*s[]={woneff,Mtwo,r,"three0,wfourw,wfiveM};

inti,n=sizeof(s)/sizeof(char*);

sort(s,n);

for(i=0;i<n;i++)

puts(s[i]);

return0;

}

思考題:n個(gè)人圍成一圈,按照1到n進(jìn)行編號(hào),從第一個(gè)人開始報(bào)數(shù),報(bào)道m(xù)

的人退出,下一個(gè)人從1重新開始,報(bào)道用的人退出,如何下去,直到剩下一個(gè)

人,編寫程序輸入m,n,按照退出的順序輸出退出人的編號(hào)(提示:用指針的

動(dòng)態(tài)屬性

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論