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