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