![](/images/contact.png)
C++/C 指針 教學(xué)設(shè)計
引言
“C++/C”是一門計算機程序設(shè)計高級語言,內(nèi)容豐富,其中的“指針”部分是重要內(nèi)容之一?!爸羔槨敝械摹岸嘀刂羔槨笔墙虒W(xué)難點,普遍認(rèn)為這個內(nèi)容“難教難學(xué)”。如何突破這個教學(xué)難點?在現(xiàn)有的相關(guān)文獻(xiàn)中是否有成功的方法可以借鑒?文獻(xiàn)[1]是介紹“C++”的著名教材。在這本書里,作者用兩個例子完成了“多重指針”的介紹:第一個例子是“指針數(shù)組”,第二個例子是“指向該數(shù)組元素的指針”,即“指向指針的指針”。這兩個例子,難度跨度過大,學(xué)生不容易理解和掌握該概念。文獻(xiàn)[2]將二重指針分別和變量以及數(shù)組結(jié)合在一起, 討論了二級指針變量與二級指針數(shù)據(jù)的用法與區(qū)別。除了上述文獻(xiàn)之外,還有不少文獻(xiàn)討論C++/C教學(xué)法。文獻(xiàn)[3] 提出了C++/C教學(xué)的“指導(dǎo)思想”:“正確處理新理論、新技術(shù)與舊內(nèi)容的關(guān)系”等。文獻(xiàn)[4] 提出了如下教學(xué)方法:采用啟發(fā)式教學(xué)、采用任務(wù)驅(qū)動教學(xué)法、采用“框架法”和“求異法”和采用“多媒體”等。文獻(xiàn)[5] 結(jié)合教學(xué)實踐,提出了“漸進(jìn)式教學(xué)法”和“啟發(fā)式教學(xué)法”,主張通過“編程”來理解新概念,通過“由易到難”啟發(fā)學(xué)生并引入新概念。
受以上參考文獻(xiàn)啟發(fā),本文將提出一個突破該教學(xué)難點的教學(xué)過程,以課堂教學(xué)設(shè)計的形式介紹于下:
一、C++/C多重指針的課堂教學(xué)設(shè)計
我們先將教學(xué)的基本條件以及學(xué)生的基本情況做一介紹,然后再談?wù)n堂教學(xué)設(shè)計的內(nèi)容和步驟。
?。ㄒ唬┙虒W(xué)的基本條件
一間教室,可容納100人左右,配備有多媒體教學(xué)設(shè)備。
(二)學(xué)生的基本情況
學(xué)生在接觸C++/C之前僅學(xué)過《計算機應(yīng)用基礎(chǔ)》,從未接觸過另外的編程語言,也沒有學(xué)過另外的計算機課程。對于該課程,學(xué)生已學(xué)過“函數(shù)”、“數(shù)組”和“單重指針”等內(nèi)容。
?。ㄈ┙虒W(xué)目的
讓學(xué)生理解并掌握概念:“二重指針”和“多重指針”。
?。ㄋ模┙虒W(xué)設(shè)計的基本思想
基于以上的教學(xué)基本條件和學(xué)生的實際情況,筆者認(rèn)為應(yīng)該按以下原則進(jìn)行教學(xué):
先簡后繁,先易后難,循序漸進(jìn),前后對比,歸納總結(jié)。
下面我們按這個原則設(shè)計教學(xué)過程。
?。ㄎ澹┙虒W(xué)過程
預(yù)備:在課堂上,老師降落銀幕,打開投影儀,啟動電腦,啟動VC系統(tǒng),進(jìn)入編輯界面;老師組織學(xué)生簡單地復(fù)習(xí)一下指針的概念,然后介紹下面的內(nèi)容:
1、多重指針(含單重指針,下同)與變量的關(guān)系
我們將通過一個簡單例子,引入多重指針的概念,并舉例該概念的初步應(yīng)用。在這里,老師結(jié)合下例指出:一個變量對應(yīng)一個內(nèi)存單元,我們可以用一重指針變量指向這個內(nèi)存單元,如果有必要的話,也可以用多重指針變量通過特定的傳遞關(guān)系指向這個內(nèi)存單元。
老師將下列程序輸入系統(tǒng)并運行,將結(jié)果輸出到銀幕上:
void main()
{int a=12,*p, **q,***r ;
p=&a;
q=&p;
r=&q;
cout< a=13;
cout< *p=14;
cout< **q=15;
cout< ***r=16;
cout< }
銀幕上顯示的結(jié)果是:
12,12,12,12
13,13,13,13
14,14,14,14
15,15,15,15
16,16,16,16
當(dāng)上面的程序運行結(jié)束之后,老師面向?qū)W生分析上述程序:
該程序的前三條語句“p=&a; q=&p; r=&q;”,其功能對應(yīng)下面的示意圖:
變量a是一個已經(jīng)初始化或者賦值的整形變量,語句“p=&a;”規(guī)定了一重指針變量p指向變量a;語句“q=&p”規(guī)定了二重指針變量q經(jīng)過一重指針變量p指向變量a;語句“r=&q;”規(guī)定了三重指針變量連續(xù)經(jīng)過兩個指針變量q和p而指向變量a。四條語句“a=13; *p=14;**q=15;和***r=16;”的功能都是對同一個變量a賦值,以上程序運行結(jié)果也驗證了這一點。
老師還應(yīng)指出:三條語句“p=&a; q=&p; r=&q;”是有序的,是由p、q、r的定義所規(guī)定的,不可顛倒順序,也不能“越級”,譬如“*q=&a;”或者“q=&a;”都是錯誤的,當(dāng)然“**r=&a”或者“*r=&p”也是錯的。另外,“&(&a)”總是錯的,因為符號“&”是取變量的地址,而地址,譬如&a,是“值”而不是變量,所以 “&(&a)”無意義。
老師還應(yīng)強調(diào)指出:此例中的int可用float、double或者char代換,其程序和結(jié)論相同,但應(yīng)該注意的是,當(dāng)用類型char代換int之后,給變量賦值時可賦字符形的,也可賦整形的。
最后,老師可以補充:此例中的變量a,也可以是數(shù)組元素,因為一個數(shù)組元素等價一個變量,只是命名規(guī)則不同而已。
2、多重指針與字符串(或者字符數(shù)組)的關(guān)系
這一步驟是為介紹“指針數(shù)組和多重指針”做準(zhǔn)備,同時也是為了拓寬多重指針的應(yīng)用范圍。
在討論“多重指針與字符串(或者字符數(shù)組)的關(guān)系”之前,老師應(yīng)強調(diào):在C++/C語言里,字符串有其特殊的操作規(guī)則,特別是將一個字符串常量賦給一個字符指針或者輸入到一個字符數(shù)組時,該指針或者數(shù)組名接收該字符串首字符的地址,而不是接收字符串本身,將字符串和多重指針結(jié)合時更要注意這一點。另外,要輸出整個字符串,只需將該字符串的首字符地址置入輸出語句即可。