• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      C語言指針教學(xué)中定義復(fù)雜數(shù)據(jù)結(jié)構(gòu)的作用及方法

      2017-03-15 18:06:33肖澤
      電腦與電信 2017年3期
      關(guān)鍵詞:運算符數(shù)組數(shù)據(jù)結(jié)構(gòu)

      肖澤

      (清遠市技師學(xué)院,廣東 清遠 511517)

      C語言指針教學(xué)中定義復(fù)雜數(shù)據(jù)結(jié)構(gòu)的作用及方法

      肖澤

      (清遠市技師學(xué)院,廣東 清遠 511517)

      C語言指針教學(xué)一直是一個難點,如何讓學(xué)生正確理解并掌握指針的定義及作用,是擺在所有教師面前的一道難題。特別是C語言中對復(fù)雜數(shù)據(jù)結(jié)構(gòu)的定義,更加抽象化且難以理解,給教學(xué)工作帶來了較大的阻力。本文通過分析指針的基本概念,對指針中的變量進行詳細(xì)說明,幫助學(xué)生理解各種運算符號,為定義復(fù)雜數(shù)據(jù)結(jié)構(gòu)的教學(xué)提供了一些便捷。

      C語言;指針教學(xué);復(fù)雜數(shù)據(jù)

      1 引言

      指針的優(yōu)點之一就是可以定義復(fù)雜的數(shù)據(jù)結(jié)構(gòu),使其簡化、高效,便于使用。它不僅與數(shù)據(jù)的物理存儲緊密相關(guān),在其他程序中也有著非常廣泛的應(yīng)用,涉及的概念也十分復(fù)雜多樣,學(xué)生學(xué)習(xí)起來容易顯得力不從心。但是作為C語言的應(yīng)用核心,指針教學(xué)的質(zhì)量直接關(guān)系到學(xué)生對C語言的掌握程度。廣大教師一定要把它作為C語言課程教學(xué)的重點來進行講授,這樣既能提高C語言的教學(xué)質(zhì)量,也可以為學(xué)生今后學(xué)習(xí)更加深奧的計算機語言打下堅實的基礎(chǔ)。

      2 指針和指針變量的定義及作用

      指針是存儲計算機內(nèi)存地址的變量,地址則是存儲單元中每個字節(jié)的唯一編號。舉例來說,如果在C語言中定義一個變量,那么程序在進行編譯的時候就會給該變量分配若干字節(jié)的存儲空間,首個字節(jié)的編號就是該變量的地址;而這個地址,即首個字節(jié)的編號,就是該變量的指針。如果在程序中專門用一個變量來存放另一個變量的指針,那么該變量又被稱為指針變量。通常在在教學(xué)中講述以上概念時,會運用一些比喻的手法來強化理論知識的形象,幫助學(xué)生理解這些概念。例如將學(xué)生宿舍樓比喻成計算機的存儲空間,其中每間宿舍都是一個存儲單元,學(xué)生相當(dāng)于存儲在其中的數(shù)據(jù),而房間號就是地址,那么房間號就是住在該宿舍中學(xué)生的指針。宿舍管理室則相當(dāng)于存儲指針的變量,對每間房間的號碼都進行管理,那么宿舍管理室就是所有宿舍房間的指針變量。

      設(shè)有三條C語句:int a,*p;a=7;p=&a;

      第l條語句定義了整型變量a和指向整型的指針變量p,在C語言程序中,系統(tǒng)會根據(jù)該語句為a和p分配相應(yīng)的存儲空間;第2條語句是把整數(shù)7存儲到了變量a中;第3條語句是把變量a的地址存儲到變量p中;那么變量p就是變量a的指針變量。想要在系統(tǒng)中訪問變量a,查看其中存儲的內(nèi)容,可以通過兩種方法,一是直接訪問變量a,二是通過訪問指針變量p來間接訪問變量a。在教學(xué)時,可以繼續(xù)運用比喻的方法來解釋變量和指針變量的應(yīng)用,即直接訪問和間接訪問的過程。直接訪問即學(xué)生直接到相應(yīng)的房間內(nèi)找想要找的人,如同直接在系統(tǒng)中查找相應(yīng)數(shù)據(jù);間接訪問則是到宿舍管理室查詢所要找的房間號及學(xué)生名字,然后再去訪問對應(yīng)的房間和人。

      3 定義復(fù)雜數(shù)據(jù)結(jié)構(gòu)的方法

      3.1 定義基類型

      在C語言中定義復(fù)雜數(shù)據(jù)結(jié)構(gòu)的第一步是定義指針變量,而定義指針變量的第一步就是定義基類型。常見的指針變量是由基類型和指針變量名組成的,指針變量的賦值要與基類型相匹配,即指針變量是專門存放基類型的變量的地址。

      以該c語句為例:float a;int*p;p=&a;p=3000;

      后面兩條語句就是錯誤的,因為它們與定義指針變量的原則相悖,即沒有定義基類型。在語言編輯程序中設(shè)置這樣的規(guī)定是有意義的,如果指針變量能夠隨意指向未經(jīng)定義的基類型,就會引起內(nèi)存區(qū)域的不確定變化,進而導(dǎo)致程序崩潰;其次,定義基類型能夠為指針運算提供支持。在指針運算的過程中,經(jīng)常需要移動指針來處理連續(xù)的存儲對象,例如數(shù)組元素;如果沒有定義基類型,在處理這類數(shù)據(jù)時同樣會引發(fā)程序崩潰。同時,指針的移動就是對指針變量進行加減運算而得到的,如果定義基類型,就會使運算更加簡潔統(tǒng)一。例如在程序中給指針變量加l,實際上指針變量增加的值并不一定是1,而是一個整數(shù)n,這個n指代數(shù)據(jù)在內(nèi)存空間中所占用的字節(jié)數(shù);想要確定n的值,就要定義基類型,即指針變量所指向的數(shù)據(jù)類型。而基類型數(shù)據(jù)對象的字節(jié)數(shù),又被稱為指針變量的步長,在一些簡單的運算中能夠起到精簡運算的目的;如果指針變量是函數(shù)類型,則其步長在運算中沒有意義。

      3.2 理解運算符

      C語言與指針有關(guān)的運算符主要有&、*和[],它們分別代表地址運算符、指針運算符和下標(biāo)運算符,其中*和[]只在表達式中起運算符作用,在指針變量定義中只能起到說明作用,沒有運算符的作用,通常在定義指針變量時要在變量名之前加*來區(qū)別于普通變量。教師在講解的過程中要把重點放在指針操作上,讓學(xué)生在實踐中理解運算符的作用。需要注意的是,在起運算符作用的時候,&和*互為逆運算,[]和*之間的關(guān)系可以用表達式p[i]=*(p+i)來表示。盡管&和*代表了地址運算符和指針運算符,讓程序在運算中獲取變量的地址及指針?biāo)赶虻淖兞浚窃趯嶋H操作中,這兩種運算符還會引申出其他含義。

      以如下語句為例,int c[3][4]={8,5,4,2,l,12,9,13,21,26,6,14};它定義了一個二維整型數(shù)組c,c是一個指針常量,也是該數(shù)組的數(shù)組名,代表數(shù)組c第0行的首個字節(jié)名稱,即常量地址,它指向的數(shù)據(jù)對象就是該二維數(shù)組的行。如果一個數(shù)組元素占用的字節(jié)數(shù)為2個,那么該常量地址的步長就是8。將運算符&加到數(shù)組c前面,則表示無意義。因為c是常量,它并沒有占用系統(tǒng)的內(nèi)存空間,自然就沒有地址;而運算符&的含義是獲取地址,但是&c卻不能獲取到任何地址,自然也就無意義。如果在引申含義的層面上去理解&c,則有著不同的意義。通常認(rèn)為&的引申義是“使指針升級”,那么&c就不再是無意義,而是成為了一個指針常量,它指向的數(shù)據(jù)對象就是整個二維數(shù)組c,它還代表數(shù)組C的首個地址,其步長為24。同樣的情況,*的引申義一般為“使指針降級”,*c也成為了一個指針常量,它指向的數(shù)據(jù)對象是該二維數(shù)組中的數(shù)組元素,它代表了數(shù)組C第0行第0列元素的地址,其步長為2。

      3.3 定義復(fù)雜數(shù)據(jù)結(jié)構(gòu)

      指針可以定義復(fù)雜的數(shù)據(jù)結(jié)構(gòu),并說明復(fù)雜數(shù)據(jù)中所包含的各種對象,例如含有復(fù)雜元素的數(shù)組、復(fù)雜函數(shù)的指針等,從而滿足應(yīng)用程序在編寫過程中對復(fù)雜對象的簡潔化描述,提高編寫效率。需要注意的是,*和[]只能在表達式中起運算符的作用,這在前面也提到過,在指針定義中它們只是簡單的指針標(biāo)志和數(shù)組標(biāo)志。而小括號()作為優(yōu)先級僅次于用戶標(biāo)識符的對象,也需要針對不同的情況對其含義進行區(qū)分,有時它是函數(shù)標(biāo)志,有時則只是一般的括號運算符。如果()挨著用戶標(biāo)識符,或者挨著一個被小括號括起來的字符串,那么它就是一個函數(shù)標(biāo)志;如果()內(nèi)部為空,或者為一個形參表列,那么它也是一個函數(shù)標(biāo)志,其他情況通常認(rèn)為是普通的括號運算符。

      定義復(fù)雜數(shù)據(jù)結(jié)構(gòu)的實質(zhì)就是說明數(shù)據(jù)中每個部分的對象及其作用,一般都是從用戶標(biāo)識符開始,按照優(yōu)先級順序,從高到低依次為括號運算符、函數(shù)標(biāo)志、指針標(biāo)志(即*)和數(shù)組標(biāo)志(即[])來逐個說明。以下面函數(shù)為例。

      float(*x(int))[6];解釋要按照優(yōu)先級順序及其結(jié)合性順序,x(int):x是一個函數(shù),該函數(shù)包含了一個整型形參;(*x (int)):x是一個函數(shù),該函數(shù)包含了一個整型形參,其返回值為指針,即x是指針函數(shù);float(*x(int))[6]:x是一個函數(shù),該函數(shù)包含了一個整型形參,其返回值為指針,指向了包含6個元素的一維數(shù)組,該一維數(shù)組的每個元素都是一個實型變量。

      通過該舉例可以看出,使用指針以后能夠極大地簡化復(fù)雜的數(shù)據(jù)結(jié)構(gòu),讓函數(shù)的層次和順序十分鮮明易懂。作為比較,可以使用C語言中的typedef語句來定義該函數(shù),以便學(xué)生更好地理解其中的不同,其形式為:

      {typedef float ARRAY[6];

      typedef ARRAY*POINTERl;

      POINTERl x(int);}

      再有數(shù)組int(*f[6])(int,int);解釋同樣要按照順序,f[6]:f是一個數(shù)組,該數(shù)組包含了6個元素;(*f[6]):f是一個數(shù)組,該數(shù)組包含了6個元素,每個元素都是一個指針變量;int(*f [6])(int,int):f是一個數(shù)組,該數(shù)組包含了6個元素,每個元素都是一個指針變量,指向了一個函數(shù),該函數(shù)的原型為int函數(shù)名是(int,int)。

      同樣用typedef語句來定義該數(shù)組,可以得到:

      {typedef int(*POINTER2)(int,int);

      POINTER2 f[6];}

      4 總結(jié)

      指針是C語言中的精華,掌握了指針的定義和方法,能夠有效地簡化復(fù)雜的數(shù)據(jù)結(jié)構(gòu),提高編寫的效率和正確率。但指針也是學(xué)好C語言的一道難關(guān),因為其概念復(fù)雜多變、使用方法靈活多樣,很多學(xué)生在學(xué)習(xí)的過程中容易產(chǎn)生畏難情緒。這就要求教師在教學(xué)中要根據(jù)由淺入深的原則,做好基礎(chǔ)知識點的講授,然后結(jié)合實踐范例,引入一些難點和重點,并通過反復(fù)練習(xí)來達到熟練掌握的目的。本文所討論的關(guān)于指針的概念及定義復(fù)雜數(shù)據(jù)結(jié)構(gòu)的方法,仍然十分淺顯,對于實際教學(xué)的幫助略顯不足。僅希望能夠起到一些拋磚引玉的作用,為今后的C語言指針教學(xué)積累一些有益的經(jīng)驗。

      [1]楊天明.C語言指針教學(xué)難點探析[J].中國科教創(chuàng)新導(dǎo)刊,2014 (8):137-138.

      [2]吳斌.C語言指針的教學(xué)[J].安徽職業(yè)技術(shù)學(xué)院學(xué)報,2004,3 (3):67-69.

      The Function and Method of Complex Data Structures Definition in C Language Pointer Teaching

      Xiao Ze
      (Qingyuan City Technician Institute,Qingyuan 511517,Guangdong)

      C language pointer teaching has always been difficult.It’s a difficult problem faced by the teachers that how to let students understand the definition and role of pointer correctly.Especially,the definition of complex data structures in C language is more abstract and difficult to understand,bring great resistance to the teaching work.This article analyzes the basic concept of pointer,and elaborates the variable of pointer in detail,helping students understand the operation symbols and providing convenient for the teaching of defining complex data structure.

      C language;the pointer teaching;complex data

      TP312-4;G642.4

      A

      1008-6609(2017)03-0067-02

      肖澤(1980-),男,江西吉安人,本科,計算機一級實習(xí)指導(dǎo),研究方向為職業(yè)教育。

      猜你喜歡
      運算符數(shù)組數(shù)據(jù)結(jié)構(gòu)
      JAVA稀疏矩陣算法
      電腦報(2022年13期)2022-04-12 00:32:38
      老祖?zhèn)魇诨具\算符
      JAVA玩轉(zhuǎn)數(shù)學(xué)之二維數(shù)組排序
      電腦報(2020年24期)2020-07-15 06:12:41
      “翻轉(zhuǎn)課堂”教學(xué)模式的探討——以《數(shù)據(jù)結(jié)構(gòu)》課程教學(xué)為例
      高職高專數(shù)據(jù)結(jié)構(gòu)教學(xué)改革探討
      中國市場(2016年45期)2016-05-17 05:15:48
      尋找勾股數(shù)組的歷程
      C++運算符重載剖析
      價值工程(2014年17期)2014-04-16 03:29:20
      TRIZ理論在“數(shù)據(jù)結(jié)構(gòu)”多媒體教學(xué)中的應(yīng)用
      《數(shù)據(jù)結(jié)構(gòu)》教學(xué)方法創(chuàng)新探討
      河南科技(2014年5期)2014-02-27 14:08:57
      表達式求值及符號推導(dǎo)
      沭阳县| 小金县| 通榆县| 阿合奇县| 交口县| 隆子县| 遂平县| 宝应县| 长治市| 信宜市| 临城县| 兴义市| 义乌市| 张家港市| 台南县| 延庆县| 五原县| 安图县| 锡林浩特市| 嘉禾县| 张家界市| 沅江市| 醴陵市| 民权县| 姜堰市| 榕江县| 宣汉县| 湘阴县| 辉县市| 农安县| 宁武县| 宁河县| 禄丰县| 沾化县| 文安县| 安多县| 新泰市| 昌江| 巴林右旗| 黔西县| 盱眙县|