国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

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

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

李祥琴

荊楚理工學(xué)院計算機工程學(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è)計》①課程教學(xué)的重點與難點。通過使用指針變量可以較方便地使用字符串、數(shù)組,可以表示各種數(shù)據(jù)結(jié)構(gòu),從而能夠編寫出執(zhí)行效率高、可讀性強的程序,它在很大程度上增強了C語言的功能。

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

1 引用指針的作用

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

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

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

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

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

2.1 指針變量和指針運算符

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

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

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

2.2 指針變量與自增自減運算符混合

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

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

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

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

假設(shè)b是二維數(shù)組,如intb[4][5]; ,可以把數(shù)組b看成包含4個元素的一維數(shù)組(b[0]、b[1]、b[2]、b[3]),而其中每一個元素又是一個一維數(shù)組,包括5個元素。因此,在二維數(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ù)組的第一個元素,通過指針下移可以指向數(shù)組中其它元素。而且,可以使用下標(biāo)法(如a[i]形式)和指針法(如*(a+i)或*(p+i))訪問一個數(shù)組元素。同時,在編程過程中我們經(jīng)常見到形如int(*p)[10]的表示形式,其中p用來表示指向一維數(shù)組,p所指向的對象包括10個整型元素的數(shù)組。

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

3.2 指針與函數(shù)

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

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

4 總結(jié)

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

注釋

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

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

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

猜你喜歡
數(shù)組指針C語言
JAVA稀疏矩陣算法
電腦報(2022年13期)2022-04-12 00:32:38
基于Visual Studio Code的C語言程序設(shè)計實踐教學(xué)探索
計算機教育(2020年5期)2020-07-24 08:52:56
JAVA玩轉(zhuǎn)數(shù)學(xué)之二維數(shù)組排序
電腦報(2020年24期)2020-07-15 06:12:41
偷指針的人
娃娃畫報(2019年5期)2019-06-17 16:58:10
基于C語言的計算機軟件編程
電子制作(2018年16期)2018-09-26 03:27:08
為什么表的指針都按照順時針方向轉(zhuǎn)動
高職高專院校C語言程序設(shè)計教學(xué)改革探索
尋找勾股數(shù)組的歷程
基于改進(jìn)Hough變換和BP網(wǎng)絡(luò)的指針儀表識別
電測與儀表(2015年5期)2015-04-09 11:30:42
論子函數(shù)在C語言數(shù)據(jù)格式輸出中的應(yīng)用
天镇县| 中牟县| 镇宁| 竹北市| 万源市| 云霄县| 林口县| 息烽县| 光泽县| 贵阳市| 台东县| 如东县| 萨迦县| 平定县| 崇礼县| 商都县| 平邑县| 惠东县| 赣州市| 集安市| 保康县| 灵山县| 上思县| 安化县| 长兴县| 南京市| 安国市| 潼关县| 弥勒县| 苏州市| 波密县| 古丈县| 屏边| 桓台县| 三江| 砀山县| 曲靖市| 清涧县| 青铜峡市| 泽普县| 蓝田县|