方星星 周麗媛
摘要:C語言函數參數傳遞內容是教學的重難點,學生在分析解決該類問題時的困惑較多。因此,為了提升教學效率,筆者提出了一套針對函數參數傳遞的教學模式。該模式要求學生深化對相關知識點的理解掌握,在講解參數傳遞過程時將參數傳遞特點和內存變量分布示意圖聯系起來,最后結合指針的教學探討數組名作為函數參數的本質。
關鍵詞:函數參數傳遞;教學模式;參數傳遞特點
中圖分類號:G642 文獻標識碼:A 論文編號:1674-2117(2016)17-0084-03
● 引言
函數參數傳遞內容是C語言教學中的重點和難點,所以很多教材都詳細論述了實參和形參的概念及區別,并將參數傳遞方式分為值傳遞和地址傳遞兩種,還詳細闡述了數組名、指針作為函數參數等內容。這使得對參數傳遞這一知識點的介紹較多且分布不均,內容之間的規律性和銜接性不強,學生不易掌握。調查發現,不少學生對參數的傳遞方式感到困惑,欠缺分析解決問題的能力,這在一定程度上挫傷了他們的學習信心和積極性。為了更好地提升教學效率,筆者在多年教學經驗的基礎上,探討了函數傳遞教學形式和方法,以供參考。
● 打牢前期課程內容基礎,強化對相關知識點的介紹
眾所周知,C語言的教學內容是循序漸進的,只有打下良好的前期基礎,才能更深入地學習后續章節內容。為了使學生深刻理解參數傳遞的內容,教師應在課堂上強調相關知識點。
首先是變量的概念。它是對內存數據空間的抽象,有值和地址兩種屬性,要讓學生注意區分,這是參數傳遞和指針學習的基礎。
其次是對數組名的理解。調查發現,當編程題中涉及將數組名作為函數參數時,很多學生都會犯同樣的錯誤,如將數組int a[10]作為實參數組,調用函數int average(int s[10],int n)時,學生經常將該函數調用寫成avegage(a[10],10)。由于學生對數組名的含義沒有深入了解,所以教師在講解數組時,應和學生強調數組名是地址,代表數組首地址,這樣便于開展后續教學內容。
再次是函數一章的知識點,具體包括函數定義、返回值、函數說明、函數調用、函數參數等概念。由于知識點之間貫穿的脈絡不甚清晰,課堂講解時較為枯燥,所以可結合案例式和互動式教學法,讓學生在課堂上講一遍、動手寫一遍,以加深對這些知識點的理解,深刻領會其在實際中的應用。
最后是指針的概念。由于它是C語言的難點,所以在課堂講解中應適當放慢教學節奏,向學生重點明確指針變量的概念、指針變量和普通變量的區別、*和&運算的含義、變量的間接訪問、指向數組元素的指針變量的概念、指針運算的含義、指針變量對數組元素的引用(指針法)等內容,這是后面各種類型的指針變量作為函數參數學習內容的基礎。在此基礎上講解數組作為函數參數傳遞的本質,往往能收到好的效果。
● 牢記參數傳遞的特點,畫出內存變量分布示意圖
很多教材將參數的傳遞歸納為值傳遞和地址傳遞兩種,并論述兩者區別,還指明了地址傳遞的方式和特點,即函數調用時,將數據的存儲地址作為參數傳遞給形參,形參與實參占用同樣的存儲單元,進行的是雙向傳遞。這樣的總結固然很好,但學生不易掌握。在筆者看來,參數傳遞的兩種劃分是沒有必要的,可以將所有的參數傳遞都看作是值傳遞,并將參數傳遞的特點概括為:①函數調用前,形參不占用內存單元;②函數調用時,才給形參分配內存單元,且將實參的值傳遞給形參;③函數調用結束后,形參占用的內存單元自動釋放。
為了培養學生的畫圖習慣,在函數的教學中應不斷強調畫出變量在內存中的分布示意圖,這樣能清晰無誤地分析結果,有利于學生對知識點的深刻理解和熟練運用。如圖1、圖2的例題,學生往往將結果錯誤地認為是9、5,并反復提問。

類似問題的講解如果將形參的特點以內存的動態分布圖畫出,學生能很容易理解,也能收到事半功倍的教學效果,上述例題的內存動態分布圖可畫為如圖3所示的形式。
很多教材還將“數組作為函數參數”列為函數一章的一節,并指明了相關注意事項,如形參數組可以不指定大小,共同占用存儲單元等,其實這部分內容可以安排到“指針”一章中專門介紹,也可以在講解數組作為函數參數傳遞時,簡要說明下實參用的是數組名,是數組首地址,形參在形式上雖是數組,卻是指針變量,即形參數組int x[10]等價于int*x,所以形參數組可以不指定大小。并強調這也是特殊的值傳遞,傳遞給形參的“值”是地址,完全符合值傳遞的三大特點。由于之前沒有學習過指針內容,所以學生可以在記憶的基礎上去學習,并牢記這一特點,即參數用數組、實現數組和形參數組是同一數組。再結合例題(如圖4、圖5)進行學習時,學生就很容易理解了,這在無形中也激發了學生的探索欲望。
● 掌握指針變量的運用,理解數組名作為形參的本質
在進入到指針內容的學習時,當該指針變量指向的是一般變量,并作為函數參數時,需指明實參和形參類型要保持一致,是將實參變量的地址作為“值”傳遞給形參變量,再將值傳遞的三大特點和內存中變量的動態分布圖相結合。
由于前期只是讓學生記住了實參數組和形參數組是同一數組,學生并沒有掌握其原理。當介紹指向數組元素的指針變量作為函數參數時,應和函數一節中的數組名作為參數的內容相銜接合并介紹。很多教材將參數的傳遞方式總結為如下頁表所示的對應情況。

雖然形式上只有四種,但看起來仍較復雜。此時,如果通過四個不同的案例,明確被調用函數是對數組元素的不同引用,則能讓學生深刻明白四種形式的實質都是一樣的,都強調形參數組的本質是指向數組元素的指針變量,所以數組的大小可以不指定,都是通過這一變量來引用數組元素。實參到形參的傳遞是值的傳遞,符合值傳遞的特點,形參指針變量在函數調用結束后會釋放。
● 結語
為了提升教學效率,筆者根據多年的教學經驗以及學生的反饋情況,對函數傳遞這一教學內容進行了優化整合,設定了層次化的教學模式。該模式從重視學生的基礎概念入手,概括出參數傳遞的特點,要求學生畫出內存變量的動態分布圖去詳細分析函數傳遞的過程,引導學生理解數組名作為函數參數的本質,從而達到學生在課堂上能聽懂,課后會熟練應用的目的,提升了學生的學習信心和學習興趣。由于指針變量類型豐富,包括指向函數的指針、指向數組的指針、指向指針的指針等,它們都可以用來作為函數參數,其傳遞過程都符合值傳遞的特點,都是通過形參指針變量來對指向的目標進行處理,所以本文不再細述。
參考文獻:
[1]譚浩強.C程序設計[M].北京:清華大學出版社(第四版),2010.
[2]宋人杰,張洪業.程序設計類課程教學體系的改革與實踐[J].科技信息,2012(3):269-270.
作者簡介:方星星(1982—),男,安徽樅陽人,解放軍陸軍軍官學院,講師,研究方向為計算機網絡、計算機軟件技術;周麗媛(1985—),女,安徽合肥人,解放軍陸軍軍官學院,講師,研究方向為計算機基礎教學理論。