下載本文檔
版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 苗木補(bǔ)栽合同范本
- 蜜蜂托養(yǎng)協(xié)議書
- 視頻征集協(xié)議書
- 認(rèn)籌車位協(xié)議書
- 設(shè)備抵對(duì)協(xié)議書
- 設(shè)備配套協(xié)議書
- 訴前保全協(xié)議書
- 試車協(xié)議書范本
- 托管醫(yī)院合同范本
- 弟弟蓋房協(xié)議書
- 對(duì)人類教育四個(gè)發(fā)展階段的探析
- TTAF 051-2021 移動(dòng)智能終端及應(yīng)用軟件用戶個(gè)人信息保護(hù)實(shí)施指南 第5部分:終端權(quán)限管理
- 二零二五年度加油站與車輛清洗服務(wù)合作協(xié)議
- 2025版生物樣本儲(chǔ)藏租賃合同樣本3篇
- 職業(yè)學(xué)院工會(huì)評(píng)優(yōu)評(píng)先實(shí)施辦法
- 中華人民共和國(guó)史期末復(fù)習(xí)
- 加油站安全現(xiàn)狀評(píng)價(jià)匯報(bào)
- 信陽(yáng)師范大學(xué)《倫理學(xué)》2021-2022學(xué)年第一學(xué)期期末試卷
- 小學(xué)2024年秋季學(xué)生1530安全教育記錄表(全學(xué)期)
- 中國(guó)普通食物營(yíng)養(yǎng)成分表(修正版)
- 低壓線路的安裝、運(yùn)行及維護(hù)
評(píng)論
0/150
提交評(píng)論