李 寧
(安徽財(cái)貿(mào)職業(yè)學(xué)院,合肥 230601)
C語(yǔ)言教學(xué)中指針的教法探究
李寧
(安徽財(cái)貿(mào)職業(yè)學(xué)院,合肥230601)
摘要:指針是C語(yǔ)言教學(xué)的重點(diǎn),也是教學(xué)的難點(diǎn),文章分析了指針與各種數(shù)據(jù)對(duì)象之間的關(guān)系,使學(xué)生能夠深入理解和掌握指針的應(yīng)用。
關(guān)鍵詞:指針;地址;數(shù)組;函數(shù);啟發(fā)式教學(xué)
指針,一直被認(rèn)為是C語(yǔ)言中的精華。只有掌握了指針,才能說(shuō)你學(xué)會(huì)了C語(yǔ)言。指針知識(shí)內(nèi)容抽象、邏輯性強(qiáng)、易混淆和遺忘?;诖?,筆者結(jié)合多年C語(yǔ)言教學(xué)經(jīng)驗(yàn),從指針教學(xué)的導(dǎo)入、概念的明確、指針與各種數(shù)據(jù)對(duì)象之間的關(guān)系幾方面,對(duì)指針進(jìn)行了分析和探討,取得了良好的教學(xué)效果,為后繼課程的學(xué)習(xí)打下了堅(jiān)實(shí)的基礎(chǔ)。
在前面C語(yǔ)言的學(xué)習(xí)中,同學(xué)們已經(jīng)清楚的有了常量和變量的概念,如果在程序中定義了一個(gè)變量,在對(duì)程序進(jìn)行編譯時(shí),系統(tǒng)給這個(gè)變量分配內(nèi)存單元有兩種方式:
(1)按變量地址存取變量值的方式稱(chēng)為“直接訪(fǎng)問(wèn)”方式,如int i,j,k;Printf(“%d”,i)。
(2)另一種存取變量值的方式稱(chēng)為“間接訪(fǎng)問(wèn)”的方式。即將變量i的地址存放在另一個(gè)變量中, 如int&pointer_1=&i。
可以打個(gè)比方,(1)就相當(dāng)于我們直接可以打開(kāi)抽屜,存取里面的物品。(2)是我們從另外一個(gè)房間,拿出打開(kāi)抽屜的鑰匙,才能存取里面的物品。由上得知:指針就是地址,是指向目標(biāo)單元的地址。計(jì)算機(jī)在運(yùn)行時(shí),數(shù)據(jù)總是要存儲(chǔ)在內(nèi)存中以備CPU的不時(shí)之需,為了能夠有效地訪(fǎng)問(wèn)數(shù)據(jù),計(jì)算機(jī)系統(tǒng)必然要對(duì)內(nèi)部存儲(chǔ)單元進(jìn)行編號(hào),就像門(mén)牌號(hào)一樣,有了明確的編號(hào),總控才能快速而準(zhǔn)確地定位并訪(fǎng)問(wèn)內(nèi)存,順利地將數(shù)據(jù)提取出來(lái)。所以我們要引入地址的概念,地址就是我們所說(shuō)的指針。
如果有一個(gè)變量專(zhuān)門(mén)存放另一變量的地址(即指針),則它稱(chēng)為“指針變量”,可以用賦值語(yǔ)句使一個(gè)指針變量得到另一個(gè)變量的地址,從而使它指向一個(gè)該變量。
2.1在定義指針變量時(shí)要注意兩點(diǎn):
(1)指針變量前面的“*”,表示該變量的類(lèi)型為指針型變量。例:fl oat *pointer_1;指針變量名是pointer_1 ,而不是* pointer_1 。
(2)在定義指針變量時(shí)必須指定基類(lèi)型。需要特別注意的是,只有整型變量的地址才能放到指向整型變量的指針變量中。
2.2在對(duì)指針變量賦值時(shí)需要注意兩點(diǎn):
(1)指針變量中只能存放地址(指針),不要將一個(gè)整數(shù)直接賦給一個(gè)指針變量。
(2)量地址不能是任意的類(lèi)型,而必須是與指針變量的基類(lèi)型具有相同類(lèi)型的變量的地址。
(1)指針與普通變量。如:int a=1,b=2;int *p1=&a,*p2=&b;上述指針變量p1、p2直接指向普通變量,這種指針?lè)Q為一級(jí)指針,如有定義:int a,*p,**q;則p為一級(jí)指針,q為二級(jí)指針;引用a的方法即有三種:a、*p、**q。
(2)指針與數(shù)組。引用一個(gè)數(shù)組元素,可以用下標(biāo)法,如a [i]形式或者指針?lè)?,?(a+i)或*(p+i)。其中a是數(shù)組名,p是指向數(shù)組元素的指針變量,其初值p=a。當(dāng)指針變量p指向數(shù)組首地址時(shí),p+1就等價(jià)于a+1,也等價(jià)于&a[1],也就是說(shuō)p+i、a+i和&a[i]三者是等價(jià)關(guān)系。由此可知:*(p+i)、*(a+i)和a[i]及p[i]四者是等價(jià)關(guān)系。
(3)指針與字符串。實(shí)際應(yīng)用中人們常用字符指針指向字符數(shù)組的元素,以便通過(guò)這種指針使用字符數(shù)組的內(nèi)容。最常見(jiàn)的情況是令字符指針指向字符串,不僅字符串可以是常量字符串,還可以是存儲(chǔ)著字符串的字符數(shù)組。
字符數(shù)組和字符指針變量二者之間的區(qū)別主要有以下幾點(diǎn):
1)字符數(shù)組由若干個(gè)元素組成,每個(gè)元素中放一個(gè)字符,而字符指針變量中存放的是地址,決不是將字符串放到字符指針變量中。
2)定義了一個(gè)字符數(shù)組,在編譯時(shí)為它分配內(nèi)存單元,它有確定的地址。而定義一個(gè)字符指針變量時(shí),給指針變量分配內(nèi)存單元,在其中可以放一個(gè)字符變量的地址。
(4)指針與函數(shù)。如果在程序中定義了一個(gè)函數(shù),在編譯時(shí),編譯系統(tǒng)為函數(shù)代碼所分配的一段存儲(chǔ)空間,這段存儲(chǔ)空間所在的起始地址(又稱(chēng)入口地址),稱(chēng)之為函數(shù)的指針。而且還定義一個(gè)指向函數(shù)的指針變量,用來(lái)存放某一函數(shù)的起始地址,這就說(shuō)明此指針變量指向該函數(shù)。
所以在使用指針時(shí),容易發(fā)下各種錯(cuò)誤,比如指針未初始化、指針越界,指向局部變量的指針、指針指向的轉(zhuǎn)移方向的錯(cuò)誤等等。但是其也有很多優(yōu)勢(shì),比如為支持C 動(dòng)態(tài)分配子程序;函數(shù)提供修改調(diào)用變?cè)撵`活手段;其作用于改善某些子程序的效率;而且還為該動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)(如二叉樹(shù)、鏈表)提供了支持等。
學(xué)生在剛開(kāi)始使用指針時(shí),由于對(duì)概念理解的不透徹,經(jīng)常會(huì)出現(xiàn)一些莫名奇妙的邏輯錯(cuò)誤,因此對(duì)指針?lè)浅N窇?。所以教師在講授指針時(shí),一定不能采取滿(mǎn)堂灌的教學(xué)方法,過(guò)多強(qiáng)調(diào)語(yǔ)法細(xì)節(jié)。應(yīng)采取啟發(fā)式教學(xué)模式,用淺顯的實(shí)例,導(dǎo)入這部分內(nèi)容;用PPT和板書(shū)相結(jié)合,給學(xué)生充分理解和思考的時(shí)間;多采用圖示、動(dòng)畫(huà)、類(lèi)比等形象直觀的方式幫助學(xué)生理解,一步步地化解難度,教才會(huì)有成效,學(xué)也會(huì)有所成,才能為數(shù)據(jù)結(jié)構(gòu)等后續(xù)課程的學(xué)習(xí)打下堅(jiān)實(shí)的基礎(chǔ)。
參考文獻(xiàn):
[1]裴新鳳.如何正確地使用C語(yǔ)言的指針[J].西北民族學(xué)院學(xué)報(bào),1999,20(06):41-43
作者簡(jiǎn)介:李寧(1981-),女,天津人,本科,講師,主要研究方向?yàn)檐浖O(shè)計(jì)。