版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、開門見山與循序漸進:一種 C語言指針教學方法1 背 景指針是C語言的精髓和靈魂,是C語言中最具魅力和最富活 力的部分,C語言通過指針來實現(xiàn)訪問硬件資源、動態(tài)分配和回 收內存空間、 降低函數(shù)調用中參數(shù)傳遞的開銷、 減少使用全局變 量、實現(xiàn)函數(shù)回調等功能。沒有指針的C語言不可能進行任何有 實際意義的編程。指針也是C語言中最危險的部分,程序會因指針使用不當而 潛藏風險,輕則導致程序退出,重則導致系統(tǒng)內存泄漏,甚至系 統(tǒng)崩潰。使用C語言編程離不開指針,但掌握和熟練使用指針卻很 難,對初學者尤其如此。指針是 C語言教學中的難點和重點,很 多教師在教學中嘗試了多種方法 1-5 ,取得了不錯的效果。作 者經
2、過多年C語言教學實踐,逐漸摸索出“開門見山”與“循序 漸進”相結合的指針教學方法, 把指針教學融合在C語言教學的 全過程中。 “開門見山”是在課程開始, 通過介紹計算機體系架 構和程序運行過程, 引入存儲器及地址概念, 盡早引入指針; “循 序漸進”是在之后課堂教學內容的設計中, 不斷介紹和強化存儲 器的概念,加強學生對地址的認識。 在正式介紹指針教學內容前, 這種教學方法使學生已經建立并熟悉指針概念, 對掌握和使用指 針編程很有幫助。2 指針學習困難的原因 學生在指針學習時,普遍感覺指針概念抽象,難以理解,影 響學習、掌握和使用。主要原因在于如下 3 點。(1) 對學生而言,程序設計是一門全
3、新類型的課程。其特 點是知識點分散、邏輯性不強。編寫代碼既要符合語法規(guī)則,又 要考慮邏輯關系, 編碼必須嚴格遵守語法規(guī)則: 一個看上去微不 足道的錯誤, 比如語句漏寫了分號, 編譯器會在其他沒有錯誤的 地方報告很多錯誤信息,這使初學者手足無措,無法排錯;程序 有了致命錯誤, 比如變量沒有初始化, 但編譯器只會輕描淡寫地 報個告警( warning ),程序運行時,卻時對時錯。這些特征對 于初學者都是陌生的, 他們以往的學習方法和經驗在面對該課程 時幾乎沒有任何借鑒作用, 這導致他們從課程開始就遇到很多困 難。(2) 學生們不了解計算機。C語言是伴隨著UNIX操作系統(tǒng) 產生的,它的語言特性和計算
4、機的構成緊密結合,甚至可以說,C語言是為對計算機了如指掌的專家設計的。而大學中常把C語言課程安排為程序設計的常識教育, 學生在學習C程序設計課程 前,還沒有學過計算機原理等課程,他們可能聽說過CPU內存等概念, 但并不了解這些概念的確切含義, 不了解程序運行的過 程,這會導致指針概念更加抽象,難以理解、掌握并使用。(3) 學生們通常是在學習 C語言遇到困難挫折的情況下, 接觸和學習指針的, 這增加了他們的畏懼心理, 影響指針內容的掌握?;谂d趣,在課程開始階段他們專心聽講,努力編寫和調 試簡單的程序,但隨著變量、函數(shù)、數(shù)組等內容逐漸引入,程序 結構越發(fā)復雜, 程序設計需要同時考慮算法, 這會使
5、學生感覺到 學習的壓力和困難, 特別是在編譯程序時, 排除一個小小的錯誤, 都要耗費很長的時間, 這嚴重影響他們的學習熱情和信心。 在這 種情況下,指針被引入課程中,并且指針概念抽象,又和C 中的變量、函數(shù)、數(shù)組、結構等聯(lián)系緊密,這些都放大了指針的學習 難度,影響學生的理解和掌握。針對如上問題, 作者逐漸探索并使用了“開門見山”與“循 序漸進”相結合的教學方法。3 開門見山 所謂開門見山,指在第一次課就介紹存儲器和地址的概念。 在介紹“ Hello world ”之后,即介紹計算機的結構、存儲器和 地址的概念,隨后介紹“第二個程序”以加深這些概念的理解。3.1 計算機結構與存儲器初學者通過“
6、Hello world ” 了解了 C語言的代碼風格、集 成開發(fā)環(huán)境和程序編譯、鏈接、執(zhí)行的過程,隨后介紹計算機的 “馮 ?諾依曼”結構,向學生說明程序在計算機內的運行過程。 課堂主要介紹如下幾個方面知識。(1)計算機構成及程序運行的方法。如圖1 所示,其中外存儲器指硬盤, 操作系統(tǒng)、 應用程序和數(shù)據(jù)都以文件形式保存在 硬盤上,內存儲器保存正在運行的程序和程序所要操作的數(shù)據(jù),這些程序是由操作系統(tǒng)從硬盤上裝入到內存儲器的。CPU (運算器、控制器)用于運行程序, CPU從程序所在的存儲器起始位置 開始,依次讀取指令并執(zhí)行,直到程序結束。(2) 內存儲器是由N個連續(xù)的存儲單元組成的,每個單元可以存
7、儲8比特二進制數(shù)(稱為一個字節(jié));N稱為內存容量。計算機為每個存儲單元分配唯一的編號,從 0 開始編起,直到 N-1,這個編號稱為該存儲單元的“地址”,CPU使用編號(地址)訪問這些存儲單元。(3) 內存儲器中存儲的既有代碼,也有數(shù)據(jù);構成程序的 代碼依次存儲在內存儲器中; 程序要操作的數(shù)據(jù)也保存在內存儲 器中。3.2 第二個程序第二個程序展示計算機的計算功能, 該程序引入了變量及數(shù) 據(jù)類型概念, 存儲器和地址在程序代碼中首次出現(xiàn)。 代碼如上圖 所示。介紹程序強調如下幾個方面的知識。(1) 計算機要計算兩個整數(shù)的和,首先需要找兩個地方來 保存這兩個整數(shù),這兩個地方就位于內存中;(2) 計算機在
8、內存中為不同類型的數(shù)據(jù)分配大小不同的存 儲空間,“ int a,b,r; ”要求計算機分配三塊內存空間,分 別用變量“ a,b,r”表示,每塊內存空間存儲一個整數(shù),變量 的值改變,表示其所代表的存儲空間存儲的內容發(fā)生了改變。3) scanf (“%d, %d”, &a , &b )表示從標準輸入設備(鍵盤)上接收用戶輸入的兩個整數(shù),這兩個整數(shù)分別保存在“a, b”所代表的內存中,內存用地址表示,“ &a, &b”分別表 示取“ a, b”的地址,“%d表示每個空間要保存的數(shù)的數(shù)據(jù)類 型為整數(shù),這確定了每個空間占據(jù)的字節(jié)個數(shù)。(4)scanf()實現(xiàn)的功能是通過很多條計算機代碼實現(xiàn)的,這些代碼在
9、程序被裝入內存時,也被裝入了內存。CPU執(zhí)行函數(shù)就是從這個函數(shù)的起始代碼開始順序執(zhí)行。 函數(shù)名 scanf 就是起始代碼在內存 中的地址,即:函數(shù)名表示的是函數(shù)代碼塊在內存中的開始地址。通過第二個函數(shù), 初步介紹了數(shù)據(jù)類型、 變量、函數(shù)的概念, 并從存儲器的角度來認識這些概念,把概念和地址結合在一起, 使 3.1 中介紹的存儲器概念具體化,加強對存儲器及地址的認 識,在之后每次使用 scanf ()時,都會強調變量、空間、地址 的對應關系,使學生熟知這些知識。4 循序漸進 循序漸進是指初學者初步接觸存儲器和地址的概念之后, 課 程會繼續(xù)從存儲器和地址的角度解釋所學內容, 以加強這些概念 及用法
10、。以函數(shù)、數(shù)組、指針、結構為例說明。4.1 函 數(shù)C語言函數(shù)采用傳值調用,在函數(shù)中修改形參的值,不會改 變實參的值,如上圖所示。程序輸出為:“ a=10,b=20”。在解釋上述結果時,不僅要強調語法規(guī)則: “函數(shù)內不能改變函數(shù)外變量的值”, 還要從存儲器的角度解釋。如圖 2, main ()函數(shù)中兩個變量“ a, b”(比如占據(jù)空間從 0x01001000開始)和swap ()函數(shù)中兩個變 量“ a,b” (比如占據(jù)空間從 0x01001100開始)使用不同的存 儲空間,swap ()函數(shù)中變量“ a,b”的值修改,改變的是 0x01001100開始的地址空間的值,但沒有修改ma in ()函
11、數(shù)中變量“ a,b”所代表的存儲空間的值,因此 main ()中“ a,b” 的值不會改變。4.2 數(shù) 組數(shù)組是C語言的重要內容,也是C語言的難點之一,在指針 章節(jié)開始之前,數(shù)組是和存儲器及地址概念結合最緊密的內容, 因此在數(shù)組部分會更多強調指針的內容。 在介紹數(shù)組概念及例子 中,主要介紹如下知識。(1 )數(shù)組是由很多相同類型的變量組成的集合,C語言通過下標改變的方式, 來表示數(shù)組中的這些變量, 為寫查找和排序 算法提供了方便。(2) 數(shù)組中每個變量在存儲器中要占據(jù)一塊存儲空間,這些變量所占據(jù)的存儲空間是連續(xù)的。比如數(shù)組float aN (N為常量)表示在計算機內存中的一塊連續(xù)的存儲器空間,
12、空間大小 為:N * sizeof (float )字節(jié)。(3) 數(shù)組名字 a 是這塊存儲空間的開始地址。a0 表示這 N個變量中的第一個變量,a和&a0相等,ai的地址和a+i*sizeof ( float )相等。(4)計算機的存儲器是有限的,連續(xù)的空閑存儲空間更有 限,因此數(shù)組中變量的個數(shù) N 是有限的。(5)下標i的取值范圍為0N-1,但如果代碼中出現(xiàn)對不 屬于數(shù)組的空間進行讀操作,比如“ float b=aN+1”,程序可 能仍可以運行;如果代碼中出現(xiàn)對不屬于數(shù)組的空間進行寫操 作,比如“ aN+1 = 11.23”,程序可能可以正常運行,但通常 會立即崩潰。因此,通過下標訪問不屬于
13、程序的空間是不安全的, 編程中要嚴格禁止。(6)若函數(shù)的參數(shù)定義為數(shù)組,則函數(shù)對形參數(shù)組內變量 修改,會同時改變實參數(shù)組變量的值, 這是因為函數(shù)的形參數(shù)組 是地址, 實參和形參表示的是同一地址空間, 內部對形參數(shù)組的 訪問,就是對實參表示空間的訪問。通過數(shù)組,進一步建立變量和存儲空間(連續(xù)存儲空間)、 地址的關系,為指針學習進一步建立基礎。4.3 指 針 經過不斷重復、鋪墊,在指針教學開始時,學生已經熟悉了 地址的概念, 也更容易理解指針, 之后的學習重點在于指針的用 法,并逐漸習慣使用指針編程。指針部分的主要內容包括: 第一, 指向變量的指針及其在函 數(shù)參數(shù)傳遞中的作用, 函數(shù)的形參定義為指
14、針, 可以在函數(shù)內部 改變函數(shù)外部變量的值,實現(xiàn)地址調用;第二,指針與數(shù)組的關 系,引入動態(tài)內存分配,學習 C 語言的存儲器管理技術;第三, 指向函數(shù)的指針, 在指針指向的存儲空間中, 存儲的是函數(shù)的代 碼,函數(shù)名字就是該存儲空間的開始地址, 初步介紹回調函數(shù)的 概念;第四,指針數(shù)組的定義和使用,支持行和列都可變的二維 數(shù)組定義及用法。4.4 結 構結構內容放在指針內容之后介紹, 主要是因為指針可以是結 構的成員變量,如果結構中指針變量指向的數(shù)據(jù)類型和結構相 同,則可以生成鏈表。介紹結構要和存儲空間以及指針的概念緊密結合。 定義結構 時,要同時強調該結構類型變量所占據(jù)的存儲空間, 如以上結構
15、定義圖。結構變量的存儲結構如圖 3所示,從中可以看到:結 構型變量中的變量, 在存儲器中的存儲順序和結構中變量定義的 順序相同; 基本變量、 數(shù)組等占據(jù)的空間和其單獨定義時占據(jù) 的空間可能不同,與編譯選項有關(是否設置了對齊要求); 指針變量(pNext)占據(jù)的空間大小固定,與指針所指向的數(shù)據(jù) 類型沒有關系。結構定義是否合法, 主要看是否能夠計算出結構變量所占據(jù) 的存儲器空間。 結構里面不能聲明同一個結類型的變量, 該遞歸 定義會導致結構變量所占據(jù)的空間無窮大, 但可以定義指向該結 構類型的指針,因為指針大小固定。結構變量和普通變量一樣, 變量賦值操作本質上是存儲器復 制。比如: Student a , b ; a=b ;是把 b 變量所占據(jù)的存儲空 間的內容, 全部復制到 a 變量所占據(jù)的存儲空間中。 如果結構中 定義了數(shù)組, 則實現(xiàn)了數(shù)組的賦值操作, 而數(shù)組自己是不支持賦 值操作的。但對于指針變量的復制,會導致 a.pNext 和 b.pNext
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度蟲草深加工項目技術合作合同4篇
- 2025版牛奶飲品原產地保護與品牌授權合同4篇
- 2025年度新型建筑吊車租賃服務協(xié)議2篇
- 二零二五年度紀錄片主題公園授權合作協(xié)議4篇
- 2025年南山磚廠知識產權保護與維權合作協(xié)議3篇
- 2025年度科技成果轉化收益分配管理合同4篇
- 二零二五版農業(yè)化肥環(huán)保標準執(zhí)行服務合同4篇
- 2025年度土地開發(fā)與房屋建設項目合同3篇
- 2025年度抹灰班組安全事故應急救援預案編制合同4篇
- 二零二五年度充電樁充電樁設備專利授權合同3篇
- 加強教師隊伍建設教師領域學習二十屆三中全會精神專題課
- 2024-2025學年人教版數(shù)學七年級上冊期末復習卷(含答案)
- 2024年決戰(zhàn)行測5000題言語理解與表達(培優(yōu)b卷)
- 四年級數(shù)學上冊人教版24秋《小學學霸單元期末標準卷》考前專項沖刺訓練
- 2025年慢性阻塞性肺疾病全球創(chuàng)議GOLD指南修訂解讀課件
- (完整版)減數(shù)分裂課件
- 銀行辦公大樓物業(yè)服務投標方案投標文件(技術方案)
- 第01講 直線的方程(九大題型)(練習)
- 微粒貸逾期還款協(xié)議書范本
- 人教版七年級上冊數(shù)學全冊課時練習帶答案
- NBT 47013.4-2015 承壓設備無損檢測 第4部分:磁粉檢測
評論
0/150
提交評論