版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
項(xiàng)目六指針——逢3退出小游戲任務(wù)一了解指針任務(wù)二了解指針與數(shù)組、函數(shù)的應(yīng)用任務(wù)三實(shí)例體驗(yàn)任務(wù)四算法歸納任務(wù)五畫流程圖任務(wù)六項(xiàng)目實(shí)現(xiàn)思考與練習(xí)
任務(wù)一了解指針
1.概述什么是指針?其實(shí)指針與其他變量一樣,所不同的是一般的變量包含的是實(shí)際的真實(shí)數(shù)據(jù),而指針是一個(gè)指示器,它告訴程序在內(nèi)存的哪塊區(qū)域可以找到數(shù)據(jù)。這是一個(gè)非常重要的概念,有很多程序和算法都是圍繞指針而設(shè)計(jì)的。存儲(chǔ)器中的一個(gè)字節(jié)稱為一個(gè)存儲(chǔ)單元,不同類型的數(shù)據(jù)占有的存儲(chǔ)單元并不相同。內(nèi)存單元的編號(hào)稱為地址,根據(jù)內(nèi)存單元的編號(hào)或地址就可以找到該內(nèi)存單元,通常情況下,這個(gè)地址就叫指針。
指針和指針變量的區(qū)別是指針就是一個(gè)地址,它是一個(gè)常量;而指針變量是一個(gè)變量,是用來存放內(nèi)存地址的變量,它既可存放變量地址,也可以存放其他數(shù)據(jù)結(jié)構(gòu)地址。數(shù)組和函數(shù)在內(nèi)存中是連續(xù)存放的,找到了首地址也就找到了數(shù)組和函數(shù)。
2.指針定義的一般形式
1)指針變量的類型說明
對(duì)指針變量的類型說明包括以下三方面的內(nèi)容:
①指針類型說明,即定義變量為一個(gè)指針變量。
②指針變量名。
③變量值(指針)所指向的變量的數(shù)據(jù)類型。
指針變量類型說明的一般形式為
類型說明符*變量名;
其中,*表示這是一個(gè)指針變量,變量名即為定義的指針變量名,類型說明符表示本指針變量所指向的變量的數(shù)據(jù)類型。例如,
int*p1;
表示p1是一個(gè)指針變量,它的值是某個(gè)整型變量的地址。或者說p1指向一個(gè)整型變量。至于p1究竟指向哪一個(gè)整型變量,應(yīng)由向p1賦值的變量的地址決定。
staticint*p2;
/*p2是指向靜態(tài)整型變量的指針變量*/
float*p3;
/*p3是指向浮點(diǎn)變量的指針變量*/
char*p4;
/*p4是指向字符變量的指針變量*/
應(yīng)該注意的是,一個(gè)指針變量只能指向同類型的變量,如p3只能指向浮點(diǎn)變量,不能時(shí)而指向一個(gè)浮點(diǎn)變量,時(shí)而又指向一個(gè)字符變量。
2)指針變量的賦值
未經(jīng)賦值的指針不能使用,而且如果賦值也只能是地址而不能是其他任何數(shù)據(jù),取地址符號(hào)為&。一般情況下取地址格式為&變量名,變量名必須是預(yù)先已經(jīng)說明過的。
指針變量賦值方法有以下幾種。
①初始化法,例如,
inta;
int*p=&a;
②賦值法,例如,
inta;int*p;
p=&a;
不允許把一個(gè)數(shù)賦予指針變量,所以int*p;p=100;?是錯(cuò)誤的。被賦值的指針變量前不能加*,所以inta;int*p;*p=&a;也是錯(cuò)誤的。
3.指針變量的運(yùn)算
指針變量可以進(jìn)行某些運(yùn)算,但其運(yùn)算的種類是有限的。它只能進(jìn)行賦值運(yùn)算和部分算術(shù)運(yùn)算及關(guān)系運(yùn)算。
1)指針運(yùn)算符
①取地址運(yùn)算符&。取地址運(yùn)算符&是單目運(yùn)算符,其結(jié)合性為自右至左,其功能是取變量的地址。在scanf函數(shù)及前面介紹的指針變量賦值中,我們已經(jīng)了解并使用了&運(yùn)算符。
②取內(nèi)容運(yùn)算符*。取內(nèi)容運(yùn)算符*是單目運(yùn)算符,其結(jié)合性為自右至左,用來表示指針變量所指的變量。在*運(yùn)算符之后跟的變量必須是指針變量。需要注意的是指針運(yùn)算符*和指針變量說明中的指針說明符*不是一回事。在指針變量說明中,“*”是類型說明符,表示其后的變量是指針類型。而表達(dá)式中出現(xiàn)的“*”則是一個(gè)運(yùn)算符,用以表示指針變量所指的變量。
例如,
main()
{
inta=5,*p=&a;
printf("%d",*p);
return0;
}
表示指針變量p取得了整型變量a的地址。本語(yǔ)句表示輸出p所指向的地址中的內(nèi)容,即變量a的值。
2)指針變量的運(yùn)算
①賦值運(yùn)算。指針變量的賦值運(yùn)算有以下幾種形式:
a.指針變量初始化賦值,前面已作介紹。
b.把一個(gè)變量的地址賦予指向相同數(shù)據(jù)類型的指針變量。例如,
inta,*pa;
pa=&a;
/*把整型變量a的地址賦予整型指針變量pa*/
c.把一個(gè)指針變量的值賦予指向相同類型變量的另一個(gè)指針變量。例如,
inta,*pa=&a,*pb;
pb=pa;
/*把a(bǔ)的地址賦予指針變量pb*/
由于pa、pb均為指向整型變量的指針變量,因此可以相互賦值。
d.把數(shù)組的首地址賦予指向數(shù)組的指針變量。例如,
inta[5],*pa;
pa=a;
/*數(shù)組名表示數(shù)組的首地址,故可賦予指向數(shù)組的指針變量pa*/
也可寫為
pa=&a[0];
/*數(shù)組第一個(gè)元素的地址也是整個(gè)數(shù)組的首地址,也可賦予pa*/
當(dāng)然也可采取初始化賦值的方法:
inta[5],*pa=a;
e.把字符串的首地址賦予指向字符類型的指針變量。例如,
char*pc;pc="clanguage";
或用初始化賦值的方法寫為
char*pc="CLanguage";
這里應(yīng)說明的是并不是把整個(gè)字符串裝入指針變量,而是把存放該字符串的字符數(shù)組的首地址裝入指針變量。關(guān)于這點(diǎn)在后面還將詳細(xì)介紹。
f.把函數(shù)的入口地址賦予指向函數(shù)的指針變量。例如,
int(*pf)();pf=f;
/*f為函數(shù)名*/
②加減算術(shù)運(yùn)算。對(duì)于指向數(shù)組的指針變量,可以加上或減去一個(gè)整數(shù)n。設(shè)pa是指向數(shù)組a的指針變量,則pa+n、pa-n、pa++、++pa、pa--、--pa運(yùn)算都是合法的。指針變量加或減一個(gè)整數(shù)n的意義是把指針指向的當(dāng)前位置(指向某數(shù)組元素)向前或向后移動(dòng)n個(gè)位置。應(yīng)該注意,數(shù)組指針變量向前或向后移動(dòng)一個(gè)位置和地址加1或減1在概念上是不同的。因?yàn)閿?shù)組可以有不同的類型,各種類型的數(shù)組元素所占的字節(jié)長(zhǎng)度是不同的。如指針變量加1,即向后移動(dòng)1個(gè)位置,表示指針變量指向下一個(gè)數(shù)據(jù)元素的首地址,即移動(dòng)了一個(gè)該數(shù)據(jù)類型的長(zhǎng)度,而不是在原地址基礎(chǔ)上加1。
例如,
inta[5],*pa;
pa=a; /*pa指向數(shù)組a,也是指向a[0]*/
pa=pa+2; /*pa指向a[2],即pa的值為&pa[2]*/
指針變量的加減運(yùn)算只能對(duì)數(shù)組指針變量進(jìn)行,對(duì)指向其他類型變量的指針變量作加減運(yùn)算是毫無意義的。例如,
再例如,
任務(wù)二了解指針與數(shù)組、函數(shù)的應(yīng)用
1.指針和數(shù)組的定義數(shù)組名代表了數(shù)組的起始地址(即第一個(gè)元素的地址)。數(shù)組的起始地址稱為數(shù)組的指針,數(shù)組各元素的地址稱為數(shù)組元素的指針。
例如,
上例表示對(duì)p當(dāng)前所指向的數(shù)組的元素a[0]賦值為1。
如果想要通過指針變量p引用a[3],則可對(duì)p的值加3,然后用指針運(yùn)算符。例如,
*(p+3)=27;
該語(yǔ)句表示對(duì)a[3]賦值為27,因?yàn)閜+3所指向的元素為a[3]。
*(p+i),*(a+i)表示p+i和a+i所指向的數(shù)組元素,即a[i]。例如,*(p+3),*(a+3)都表示a[3]。
指向數(shù)組的指針變量也可以用下標(biāo)形式,如p[i]與*[p+i]等價(jià)。
下標(biāo)法:如a[i]的形式。
指針法:如*(p+i)或*(a+i),其中a是數(shù)組名,p是指向數(shù)組的指針變量,其初始值為p=a;。
2.?dāng)?shù)組指針的應(yīng)用
指向數(shù)組的指針變量稱為數(shù)組指針變量。在討論數(shù)組指針變量的說明和使用之前,我們先明確幾個(gè)關(guān)系。
一個(gè)數(shù)組是由連續(xù)的一塊內(nèi)存單元組成的。數(shù)組名就是這塊連續(xù)內(nèi)存單元的首地址。一個(gè)數(shù)組也是由各個(gè)數(shù)組元素(下標(biāo)變量)組成的。每個(gè)數(shù)組元素按其類型不同占有幾個(gè)連續(xù)的內(nèi)存單元。一個(gè)數(shù)組元素的首地址也是指它所占用的幾個(gè)內(nèi)存單元的首地址。一個(gè)指針變量既可以指向一個(gè)數(shù)組,也可以指向一個(gè)數(shù)組元素,可把數(shù)組名或第一個(gè)元素的地址賦予它。如要使指針變量指向第i號(hào)元素,可以把i元素的首地址賦予它或把數(shù)組名加i賦予它。
例如,
再例如,
3.?dāng)?shù)組名和數(shù)組指針變量作函數(shù)參數(shù)
數(shù)組名就是數(shù)組的首地址,實(shí)參向形參傳送數(shù)組名實(shí)際上就是傳送數(shù)組的地址,形參得到該地址后也指向同一數(shù)組。這就好像同一件物品有兩個(gè)彼此不同的名稱一樣。同樣,指針變量的值也是地址,數(shù)組指針變量的值即為數(shù)組的首地址,當(dāng)然也可作為函數(shù)的參數(shù)使用。
例如,
又例如,
例如,將數(shù)組a中的n個(gè)整數(shù)按相反順序存放。
方法一:實(shí)參用數(shù)組、形參用指針變量來實(shí)現(xiàn),程序如下:
方法二:實(shí)參用指針變量、形參用數(shù)組來實(shí)現(xiàn):
方法三:形參和實(shí)參都用指針變量來實(shí)現(xiàn):
4.字符串?dāng)?shù)組和字符指針變量
用字符串?dāng)?shù)組和字符指針都可以實(shí)現(xiàn)字符串的存儲(chǔ)和運(yùn)算,但兩者有一定的區(qū)別。
(1)字符指針變量本身是一個(gè)變量,用于存放字符串的首地址。而字符串本身存放于以此為首地址的一塊連續(xù)的內(nèi)存空間中,并以“\0”結(jié)束。字符串?dāng)?shù)組是由若干個(gè)數(shù)組元素組成的,它可以存放整個(gè)字符串。
(2)對(duì)字符串?dāng)?shù)組賦值作初始化時(shí),必須用外部類型或靜態(tài)類型,即必須為靜態(tài)存儲(chǔ)方式,而字符指針無此限制。
(3)對(duì)于字符指針方式,有char*p=“China”;可寫為char*p;p=“China”;
而數(shù)組staticchars[]=“China”;不能寫為chars[5];s={“China”};
對(duì)數(shù)組的賦值(非賦初值)只能對(duì)字符串?dāng)?shù)組中的每一個(gè)元素逐一賦值。
例如,
例如,
又例如,指針數(shù)組作指針型函數(shù)的參數(shù)。
任務(wù)三實(shí)例體驗(yàn)
在設(shè)計(jì)完整的項(xiàng)目之前,我們先演示一下小游戲,有助于大家體會(huì)本項(xiàng)目的處理過程。這種思想可以應(yīng)用到更多的問題上。我們的總體思想就是數(shù)字代入法,經(jīng)過幾個(gè)具體的實(shí)例,總結(jié)出一個(gè)公式或者一個(gè)專門的代碼。
假設(shè)我們總共有20個(gè)小朋友。
(1)根據(jù)項(xiàng)目要求逢3退出的規(guī)則,第一輪退出的是:3,6,9,12,15,18。
(2)第二輪退出的是:1,5,10,14,19。
(3)第三輪退出的是:4,11,17。
(4)第四輪退出的是:7,16。
任務(wù)四算法歸納
根據(jù)任務(wù)一細(xì)化的功能和任務(wù)三中的實(shí)例,我們可以設(shè)計(jì)以下幾步實(shí)現(xiàn)功能,這些步驟即可稱為算法。逢3退出的算法如下:
(1)先規(guī)定有多少小朋友參加這個(gè)小游戲。
(2)給每個(gè)小朋友編號(hào)。
(3)小朋友圍成一個(gè)圈,從第一個(gè)小朋友開始報(bào)數(shù),逢3,這個(gè)小朋友就退出。
(4)離他最近的小朋友,又從1開始報(bào)數(shù),逢3,這個(gè)小朋友就退出。
(5)直到只剩下最后一個(gè)小朋友,他(她)就可以得到獎(jiǎng)品——蘋果。
任務(wù)五畫流程圖
用流程圖的方式表示上述算法,如圖6.1所示。
任務(wù)六項(xiàng)目實(shí)現(xiàn)
本項(xiàng)目的實(shí)現(xiàn)程序如下:
程序運(yùn)行結(jié)果如圖6.2所示。
圖6.2程序運(yùn)行結(jié)果
思?考?與?練?習(xí)
一、選擇題
1.以下程序的輸出結(jié)果是()。main(){
inta=25,*p;
p=&a;
printf("%d",++*p);
A.23 B.24 C.25 D.26
2.類型相同的兩個(gè)指針變量之間不能進(jìn)行的運(yùn)算是()。
A.< B.= C.+ D.-
3.若有語(yǔ)句“int(*p)[M];”,其中標(biāo)識(shí)符p表示的是()。
A.M個(gè)指向整型變量的指針
B.指向M個(gè)整型變量的函數(shù)指針
C.一個(gè)指向具有M個(gè)整型元素的一維數(shù)組的指針
D.具有M個(gè)指針元素的一維數(shù)組,每個(gè)元素都是指向整型變量的指針
4.若有語(yǔ)句“int(*p)();”,其中標(biāo)示符p表示的是()。
A.指向整型變量的指針
B.指向整型函數(shù)的指針
C.返回整型指針的函數(shù)
D.返回整型變量的函數(shù)
5.以下程序的運(yùn)行結(jié)果是()。
6.執(zhí)行以下程序后,a的值為【①】,b的值為【②】。
7.變量的指針的含義是指該變量的()。
A.值 B.地址
C.名 D.一個(gè)標(biāo)志
8.若有定義inta=5;,則下面對(duì)①②兩個(gè)語(yǔ)句的解釋正確的是()。
①int*p=&a; ②*p=a;
A.語(yǔ)句①和②中的*p含義相同,都表示給指針變量p賦值
B.①和②語(yǔ)句的執(zhí)行結(jié)果,都是把變量a的地址值賦值給指針變量p
C.①在對(duì)p進(jìn)行說明的同時(shí)進(jìn)行初始化,使p指向a
②將變量a的值賦值給指針變量p
D.①在對(duì)p進(jìn)行說明的同時(shí)進(jìn)行初始化,使p指向a
?②將變量a的值賦值給*p
9.若有語(yǔ)句int*point,a=4;和point=&a;,下面均代表地址的一組選項(xiàng)是()。
A.a(chǎn),point,*&a B.&*a,&a,*point
C.*&point,*point,&a D.&a,&*point,point
10.若有說明:int*p1,*p2,m=5,n;,以下均是正確賦值語(yǔ)句的選項(xiàng)是()。
A.p1=&m;p2=&p1;
B.p1=&m;p2=&n;*p1=*p2;
C.p1=&m;p2=p1; D.p1=&m;*p2=*p1;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2031年中國(guó)日光燈具行業(yè)投資前景及策略咨詢研究報(bào)告
- 環(huán)保監(jiān)測(cè)燃油運(yùn)輸協(xié)議
- 國(guó)際學(xué)校水電維修服務(wù)協(xié)議
- 地下管線施工中的超挖管理與措施
- 未來學(xué)生健康管理以視力保護(hù)為重點(diǎn)的研究報(bào)告
- 大型水利工程攔水壩施工技術(shù)分析
- 公共設(shè)施電氣施工質(zhì)量保障與安全措施
- 攔砂壩工程施工方案的優(yōu)化技術(shù)措施
- 全媒體廣告投放策略制定及執(zhí)行協(xié)議
- 新材料應(yīng)用研究開發(fā)合同
- 2024解析:第三章物態(tài)變化-講核心(原卷版)
- DB32T 1590-2010 鋼管塑料大棚(單體)通 用技術(shù)要求
- 安全行車知識(shí)培訓(xùn)
- 2024年安徽省高校分類對(duì)口招生考試數(shù)學(xué)試卷真題
- 第12講 語(yǔ)態(tài)一般現(xiàn)在時(shí)、一般過去時(shí)、一般將來時(shí)(原卷版)
- 2024年采購(gòu)員年終總結(jié)
- 2024年新疆區(qū)公務(wù)員錄用考試《行測(cè)》試題及答案解析
- 肺動(dòng)脈高壓的護(hù)理查房課件
- 2025屆北京巿通州區(qū)英語(yǔ)高三上期末綜合測(cè)試試題含解析
- 公婆贈(zèng)予兒媳婦的房產(chǎn)協(xié)議書(2篇)
- 煤炭行業(yè)智能化煤炭篩分與洗選方案
評(píng)論
0/150
提交評(píng)論