• 
    

    
    

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

      ?

      C語言中指針的研究與總結(jié)

      2012-04-29 23:47:41李祥琴
      科教導(dǎo)刊 2012年6期
      關(guān)鍵詞:數(shù)組指針函數(shù)

      李祥琴

      荊楚理工學(xué)院計(jì)算機(jī)工程學(xué)院 湖北·荊門 448000)

      摘 要 指針在C語言學(xué)習(xí)中起著舉足輕重的作用,c語言學(xué)的好不好關(guān)鍵在于對指針的掌握。本文介紹了指針學(xué)習(xí)的現(xiàn)狀、引入指針的作用,并對C語言指針中較易混淆的概念進(jìn)行了詳細(xì)闡述,最后探討了指針與數(shù)組、函數(shù)的關(guān)系和使用方法。

      關(guān)鍵詞 指針 C語言 數(shù)組 函數(shù)

      中圖分類號:TP393 文獻(xiàn)標(biāo)識碼:A

      Study and Summary on Pointer in C Language

      LI Xiangqin

      (School of Computer Science, Wuhan University, Wuhan, Hubei 430079;

      School of Computer Engineering, Jingchu University of Technology, Jingmen, Hubei 448000)

      Abstract Pointer in C language learning plays an important role, the key is to master the pointer in C Language. This article describes the learning status of pointer, the role of introduction of the pointer, and C language pointer more confusing concepts were elaborated, and finally explore the relationship between pointers and arrays, functions, and use.

      Key words pointer; C Language; array; function

      0 引言

      指針是C語言的精華,也是大學(xué)《C語言程序設(shè)計(jì)》①課程教學(xué)的重點(diǎn)與難點(diǎn)。通過使用指針變量可以較方便地使用字符串、數(shù)組,可以表示各種數(shù)據(jù)結(jié)構(gòu),從而能夠編寫出執(zhí)行效率高、可讀性強(qiáng)的程序,它在很大程度上增強(qiáng)了C語言的功能。

      對于一個(gè)不涉及指針、只有程序設(shè)計(jì)結(jié)構(gòu)、函數(shù)和數(shù)組的程序,許多學(xué)生在分析它時(shí)還覺得得心應(yīng)手,一旦引入了指針,便不知所措。究其原因,對指針的理解只停留在表層,沒有從較深層次去理解。指針的概念本身比較復(fù)雜,涉及指針與地址、普通變量與指針變量、指針與函數(shù)、指針與數(shù)組,使用也比較靈活,需要多思考、多總結(jié)、多上機(jī),在實(shí)際操作中才能逐漸掌握。因此,如何學(xué)好C語言中的指針成了一個(gè)值得研究的課題,下面就幾年來在實(shí)踐教學(xué)過程中存在的想法進(jìn)行總結(jié)和學(xué)習(xí)。

      1 引用指針的作用

      通過定義指針變量可以確定存儲單元的地址和類型,如有int i, *p=&i;則變量i與*p是等價(jià)的,在程序中可以用變量i和*p兩種方式來訪問存儲單元。因此,指針變量是一種新的訪問存儲單元的方法,它的作用主要表現(xiàn)在三個(gè)方面:

      (1)能夠突破變量作用域的限制。程序中通常把一部分代碼放在一個(gè)函數(shù)中,基于函數(shù)的封閉性,有些操作我們不能在它的外部執(zhí)行,比如利用函數(shù)交換兩個(gè)實(shí)參的值。當(dāng)使用指針變量作參數(shù)時(shí),實(shí)參傳遞的是對應(yīng)存儲單元的地址,若利用形式參數(shù)直接訪問對應(yīng)存儲單元,將會打破變量作用域的限制,可以在函數(shù)中使用外部的存儲單元。

      (2)可以提高函數(shù)的執(zhí)行效率。形參相關(guān)的存儲單元較大時(shí),如結(jié)構(gòu)體,函數(shù)執(zhí)行中用實(shí)參賦值給形參將花費(fèi)較多時(shí)間和存儲空間。如果把形參的類型換成相應(yīng)的指針類型,函數(shù)的執(zhí)行效率則會大大提高。

      (3)使用未命名的存儲單元。內(nèi)存中的堆存儲空間在程序運(yùn)行中是用戶自己申請并指定大小,一般通過調(diào)用庫函數(shù)來完成,沒有變量直接參與,只能利用指針變量間接引用的方式實(shí)現(xiàn)。

      2 指針中較易混淆概念的理解

      2.1 指針變量和指針運(yùn)算符

      C語言中通過變量使用計(jì)算機(jī)中的內(nèi)存,變量是內(nèi)存中某塊存儲單元的標(biāo)識,它用來存放數(shù)據(jù),如整型變量存儲整數(shù),浮點(diǎn)型變量存儲實(shí)數(shù)。指針變量也是一種變量,定義一個(gè)指針變量就會有一塊存儲單元與之對應(yīng),只是它存儲的是地址,是某類型的地址,如實(shí)型指針變量只能存儲實(shí)型變量的地址,短整型指針變量只能存儲短整型變量的地址。

      指針運(yùn)算符“*”在指針中一般在兩種情況下出現(xiàn):第一種是定義指針,如inti=13,*q;第二種是在賦值語句或程序執(zhí)行中出現(xiàn)。第一種中“*”代表該變量的類型是指針型變量,指針變量名是p,而不是*p。第二種中 “*” 運(yùn)算符表示取它指向的內(nèi)容,*q表示指針變量q所指向的變量。

      比如給指針賦值,可以采用兩種方法: ① int i=3,*p; p=&i ② int i=3,*p=&i分別是先定義后賦值和邊定義邊賦值。實(shí)際教學(xué)中許多學(xué)生在先定義后賦值p=&i中常常將p錯(cuò)誤寫成*p ,主要是沒有弄清楚概念,&i表示變量i的地址,而*p表示p指向的變量,變量的內(nèi)容是數(shù)據(jù),數(shù)據(jù)和地址是兩種不同的值。

      2.2 指針變量與自增自減運(yùn)算符混合

      許多學(xué)生在編程過程中總是辨不清(*p)++與*p++,其實(shí)仔細(xì)分析不難發(fā)現(xiàn)這兩個(gè)表達(dá)式在程序執(zhí)行時(shí)是有規(guī)律可循的。比如有int i=3,*p; p=&i成立,則(*p)++可以(下轉(zhuǎn)第141頁)(上接第114頁)先求括號中的內(nèi)容,再進(jìn)行自增運(yùn)算,相當(dāng)于i++ ;而對于*p++來說,它需要考慮運(yùn)算符的優(yōu)先級和結(jié)合方向。由于自增運(yùn)算符++與指針運(yùn)算法*優(yōu)先級別相同,結(jié)合方向又為自右而左,它相當(dāng)于*(p++),可以分成兩步進(jìn)行計(jì)算,第一步執(zhí)行*p,即i的值,第二步執(zhí)行指針移動p=p+1, p值發(fā)生改變。

      2.3 數(shù)組名和函數(shù)名

      數(shù)組名不能代表整個(gè)數(shù)組。C語言規(guī)定數(shù)組名(不包括形參數(shù)組名,形參數(shù)組并不占據(jù)實(shí)際的內(nèi)存單元)代表數(shù)組中首元素的地址,②即序號為0的元素的地址。

      假設(shè)a是一維數(shù)組,如inta[10]; ,數(shù)組名a代表數(shù)組首地址,則a+i代表從首地址開始,往后偏移i個(gè)位置,即相當(dāng)于是數(shù)組元素a[i]的地址。因此,a和&a[0]都代表第一個(gè)元素的地址,同理a+i和&a[i]都代表第i+1個(gè)元素的地址。

      假設(shè)b是二維數(shù)組,如intb[4][5]; ,可以把數(shù)組b看成包含4個(gè)元素的一維數(shù)組(b[0]、b[1]、b[2]、b[3]),而其中每一個(gè)元素又是一個(gè)一維數(shù)組,包括5個(gè)元素。因此,在二維數(shù)組中數(shù)組名b代表數(shù)組的首地址,b+1是序號為1的行的首地址或稱第2行的首地址。

      跟數(shù)組名一樣,函數(shù)名可以退化成指針。函數(shù)名是函數(shù)的地址,也就是入口地址。

      3 指針與數(shù)組、函數(shù)的關(guān)系

      3.1 指針與數(shù)組

      指針可以指向數(shù)組,而數(shù)組也可以是指針數(shù)組。因此,指針與數(shù)組關(guān)系中有指向數(shù)組元素的指針和和指針數(shù)組。兩者在形式上很相近,但意義不同。

      定義指向數(shù)組元素的指針與指針變量的定義相似,如int a[10]; int*p;p=&a[0]; ,那么指針變量p指向了一維數(shù)組的第一個(gè)元素,通過指針下移可以指向數(shù)組中其它元素。而且,可以使用下標(biāo)法(如a[i]形式)和指針法(如*(a+i)或*(p+i))訪問一個(gè)數(shù)組元素。同時(shí),在編程過程中我們經(jīng)常見到形如int(*p)[10]的表示形式,其中p用來表示指向一維數(shù)組,p所指向的對象包括10個(gè)整型元素的數(shù)組。

      指針數(shù)組是形如*p[5],它是一個(gè)數(shù)組,每一個(gè)元素都相當(dāng)于一個(gè)指針變量。為了更方便、靈活的處理字符串,引入了指針數(shù)組。二維字符數(shù)組和指針數(shù)組都可以用來存放字符串,如果使用二維字符數(shù)組存放則會產(chǎn)生一些問題,比如在定義二維字符數(shù)組時(shí),需要規(guī)定列數(shù),而實(shí)際操作中,給定的各個(gè)字符串長度往往不相等,若以最長得字符串長度來限定列數(shù),將會浪費(fèi)許多內(nèi)存空間。如果以指針數(shù)組來存放,只需將指針數(shù)組的各個(gè)元素指向相應(yīng)字符串,通過改變指針數(shù)組元素的指向就能改變各元素的值。

      3.2 指針與函數(shù)

      指針可以指向字符變量、實(shí)型變量、一維數(shù)組、字符串,也可以指向一個(gè)函數(shù)。函數(shù)名代表函數(shù)的入口地址,即函數(shù)的指針,形如c =(*p)(a,b); ,它用指針形式實(shí)現(xiàn)了函數(shù)的調(diào)用。

      函數(shù)可以返回整型值、實(shí)型值,也可以返回一個(gè)地址。形如,int*a(int x,int y);從形式上看,該式子與普通函數(shù)的定義比較相似,這里函數(shù)名a前多了一個(gè)*運(yùn)算符,它表示函數(shù)是指針型函數(shù),一般在該函數(shù)內(nèi)部會再定義一個(gè)指針變量,同時(shí)給出相應(yīng)的return語句。

      4 總結(jié)

      指針不僅在C語言中占據(jù)核心地位,還在一些課程如《數(shù)據(jù)結(jié)構(gòu)》③中起很重要的作用,該課程里幾乎所有算法的實(shí)現(xiàn)都離不開指針。而且,指針也出現(xiàn)在許多重要考試中,如大學(xué)計(jì)算機(jī)等級考試和計(jì)算機(jī)軟件水平能力考試。因此,指針是學(xué)好C語言的關(guān)鍵。但C語言概念復(fù)雜,使用靈活,大部分學(xué)生難以掌握。在上機(jī)實(shí)驗(yàn)中,學(xué)生更容易出錯(cuò),而且錯(cuò)誤難以發(fā)現(xiàn),這不僅要求教師在教學(xué)中能夠深刻理解指針的概念,做到靈活應(yīng)用,還需要不斷的進(jìn)行總結(jié)、比較和實(shí)踐,而且要求教師能夠利用各種教學(xué)手段與方法讓學(xué)生更容易接受和理解, 同時(shí)也要求學(xué)生能夠深入理解指針的概念、注重上機(jī),在實(shí)踐中不斷學(xué)習(xí)、提高和完善。

      注釋

      ① 任正云,李素若.C語言程序設(shè)計(jì).北京:水利水電出版社,2007.

      ② 譚浩強(qiáng).C程序設(shè)計(jì)(第三版).北京:清華大學(xué)出版社,2005.

      ③ 嚴(yán)蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu).北京:清華大學(xué)出版社,2004.

      猜你喜歡
      數(shù)組指針函數(shù)
      JAVA稀疏矩陣算法
      二次函數(shù)
      第3講 “函數(shù)”復(fù)習(xí)精講
      二次函數(shù)
      函數(shù)備考精講
      JAVA玩轉(zhuǎn)數(shù)學(xué)之二維數(shù)組排序
      偷指針的人
      為什么表的指針都按照順時(shí)針方向轉(zhuǎn)動
      尋找勾股數(shù)組的歷程
      基于改進(jìn)Hough變換和BP網(wǎng)絡(luò)的指針儀表識別
      電測與儀表(2015年5期)2015-04-09 11:30:42
      安国市| 沐川县| 抚州市| 安国市| 东辽县| 页游| 濮阳市| 睢宁县| 宁强县| 文化| 中牟县| 邢台县| 桐城市| 固原市| 丰台区| 安远县| 镇原县| 九江市| 从江县| 察哈| 浦东新区| 咸宁市| 喀什市| 嘉兴市| 丰顺县| 聂荣县| 西充县| 湘潭县| 雷山县| 双峰县| 白水县| 民丰县| 温泉县| 巍山| 方山县| 吴旗县| 潞城市| 城固县| 宝坻区| 永州市| 远安县|