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

?

指針教學(xué)實踐

2013-04-23 03:03:18劉井蓮趙衛(wèi)績馬春華
綏化學(xué)院學(xué)報 2013年3期
關(guān)鍵詞:數(shù)組指針C語言

劉井蓮 趙衛(wèi)績 馬春華

(綏化學(xué)院 黑龍江綏化 152061)

一、序言

指針是C語言的一個重要概念,在C語言的教學(xué)中,能否正確理解和使用指針是衡量學(xué)生是否掌握C語言程序設(shè)計的一個重要標(biāo)志,也影響學(xué)生在后續(xù)課程《數(shù)據(jù)結(jié)構(gòu)》和《C++程序設(shè)計》等課程的學(xué)習(xí)。每一個學(xué)習(xí)C語言的人,如果不會指針,就沒有真正掌握C語言。但對于初學(xué)者來說,指針概念不易于理解,不易掌握。因此關(guān)于C語言指針的教學(xué)方法及相關(guān)教學(xué)研究得到了較多關(guān)注[1~3],并提出了很多好的教學(xué)方法。基于此,針對我院C語言學(xué)習(xí)情況,結(jié)合多年C語言教學(xué)經(jīng)驗,在深入探討C語言中循環(huán)和函數(shù)核心知識點問題的基礎(chǔ)上[4~5],從指針的教學(xué)的導(dǎo)入、指針概念運算初始化幾個方面對C語言指針進(jìn)行了分析和探討,并結(jié)合與數(shù)組和函數(shù)的關(guān)系進(jìn)行了深入的研究分析,使學(xué)生很快進(jìn)入到C語言程序設(shè)計中來,為數(shù)據(jù)結(jié)構(gòu)、C++等后續(xù)課程的的學(xué)習(xí)奠定了堅實的基礎(chǔ)。

二、導(dǎo)入

在前面學(xué)習(xí)中,數(shù)據(jù)分為常量和變量,變量的值是可以改變的,而常量是一個具體的值。那么變量在內(nèi)存中是如何存儲的、如何讀取的呢?如果在程序中定義了一個變量,例如int a;在對程序編譯時,系統(tǒng)會在內(nèi)存中為變量a分配4個字節(jié)的內(nèi)存空間。內(nèi)存區(qū)每個字節(jié)都有一個編號,這就是地址。而系統(tǒng)是通過地址找到對應(yīng)的變量單元,例如在C語言中為變量a輸入值,代碼是:scanf(“%d”,&a),“&”是取地址符號,處理過程是在“int a;”之后系統(tǒng)已經(jīng)自動為這個變量分配了4個字節(jié)的存儲空間,當(dāng)為變量a輸入具體值,首先在內(nèi)存中找到變量a的地址,然后將輸入的值存到到該地址對應(yīng)的存儲單元中。打個比方,地址是教室的具體位置,而變量名是教室編號,變量值是教室中學(xué)生。由于通過地址可以找到所需存儲單元,可以說地址指向?qū)?yīng)變量,因此C語言中,地址形象化地稱為指針。知道存放地址的變量是指針變量,導(dǎo)入到下一節(jié)“初識指針變量”。

三、初識指針變量

(一)認(rèn)識地址符號“&”

介紹指針變量之前,首先需要理解楚下變量、變量值和變量的地址之間的關(guān)系,下面以實例1來認(rèn)識地址符號“&”,弄清變量、變量值和變量的地址三者之間的關(guān)系。

實例1:

#include

int main()

{int i=13;

printf("i=%d&i=%d ",i,&i);return 0;}輸出結(jié)果:

i=13&i=1245052

通過輸出結(jié)果,可以看出“&”是取地址符號。

(二)指針變量性質(zhì)

變量有三個要素:變量名、變量值、變量的地址。指針變量也是變量,那么也有三要素,即變量名、變量值和變量的地址。以實例2說明如下。

實例2:

輸出結(jié)果:

i=13&i=1245052

p=1245052&p=1245048

通過實例2,可以看出指針變量名為p的值是1245052,由于p是指針變量,存儲的是i的地址,因此變量i的地址就是p的值,有&i=1245052。p是指針變量也是變量,也有地址,地址是1245048。

(三)指針變量存儲

指針變量在內(nèi)存中占4個字節(jié),與指向的變量的數(shù)據(jù)類型無關(guān)。下面以實例3說明如下。

實例3:輸出結(jié)果:

size of c=1 size of i=4

size of p1=4 size of p2=4

通過實例3說明,指針變量p1和p2雖然指向不同數(shù)據(jù)類型的變量,但p1和p2在內(nèi)存中占的存儲空間都是4個字節(jié)。通過多次實驗,定義多個指針變量,指向多個存儲空間,得到結(jié)論都是指針變量所占存儲空間是4個字節(jié),讀者也可以自己進(jìn)行測試。

(四)“*”運算符

訪問內(nèi)存中的數(shù)據(jù)有兩種方式:直接訪問和間接訪問。直接訪問就是通過變量來實現(xiàn),變量是內(nèi)存中的某一塊存儲區(qū)域的名稱,這種訪問方式比較簡單,也較常用;間接訪問就是通過指針來實現(xiàn)[6],下面通過實例4來說明間接訪問方式。

實例4:

代碼“i=4;”是對變量i的直接訪問,代碼“int*p=&i;”是聲明一個指針變量,使指針變量p指向整型變量i,代碼“*p=6;”是對變量i的間接訪問,將指針變量p所指向的變量賦值為6,因此第一次輸出i值,結(jié)果為4,第二次輸出i值,結(jié)果為6。

四、指針的相關(guān)問題探討

在認(rèn)識了指針變量后,提到C語言教材中指針的前面章節(jié)中介紹了兩個重要知識點“數(shù)組和函數(shù)”,對于數(shù)組和函數(shù)與指針有很多聯(lián)系,引入“函數(shù)與指針”和“數(shù)組與指針”。

(一)函數(shù)與指針

普通變量可以作為函數(shù)參數(shù),指針變量也是變量,當(dāng)然也可以作為函數(shù)參數(shù),具體用法見實例5。

實例5:

輸出結(jié)果:

i=5&i=1245052

p=1245052*p=5&p=1244972

這種方式還是“值傳遞”,只不過實參的值是變量的地址而已。而在函數(shù)中改變的不是實參的值(即地址,這種改變也影響不到實參),而是實參地址所指向的變量的值。通過這個實例,可以看出實參是 &i(值為1245052),傳遞給形參 p(值為1245052),而形參p是內(nèi)存中的另一個變量,地址為1244972。

如果在fun函數(shù)中增加一條語句 *p=6;是對變量i的間接訪問,將i的值修改為6,而如果增加 int j=9;p=&j;*p=10; 先修改p的值,p保存的是變量j的地址,*p是對j的間接訪問,將j修改為10,因為p保存的已經(jīng)不是變量i的地址了,所以與i無關(guān)了。

為了更好地強化指針變量作為函數(shù),下面再以一個典型實例分析,見實例6。

實例6:

輸出結(jié)果:

第一次交換后:i=3 j=4

第二次交換后:i=4 j=3

通過實驗結(jié)果我們可以發(fā)現(xiàn),在第一次交換,主函數(shù)通過調(diào)用swap1函數(shù),將變量i,j的值傳遞給了形參p,q。在swap函數(shù)中的交換的是p和q的值,p和q值交換后,并不能將交換后值傳給i和j,即普通變量作為形參,實參值傳給形參,但形參值不能傳給實參;在第二次交換,主函數(shù)通過調(diào)用swap2函數(shù),將變量i,j的地址傳遞給了形參p,q。swap2函數(shù)中的*p和*q是對i,j的間接訪問,*p和*q表示的是p和q所指向的變量,由于i和j的地址值是p和q,p和q所指向的變量則是i和j,在swap2函數(shù)中交換p和q所指向變量的值,即就是交換i和j的值,因此在調(diào)用swap2函數(shù)后,實現(xiàn)了交換i和j的值。

(二)數(shù)組與指針

通過指針變量可指向一個簡單變量,而數(shù)組元素可當(dāng)作簡單變量使用,因此指針變量也可指向數(shù)組元素,因為數(shù)組是存儲在一片連續(xù)的內(nèi)存區(qū)中,當(dāng)指針指向某個數(shù)組元素后,可通過向前或向后移動指針訪問數(shù)組中的其它元素。數(shù)組是由多個數(shù)組元素組成的,一個數(shù)組元素的首地址是第一個元素的地址。指針變量可以指向變量,當(dāng)然可以指向數(shù)組元素。

從前面的學(xué)習(xí)者,知道數(shù)組在內(nèi)存中是連續(xù)存放的,例如int a[10],表示10個同種數(shù)據(jù)類型的變量,即數(shù)組元素:a[0]~a[9],那么每個元素的地址則為:&a[0]...&a[9],數(shù)組元素的地址也可以記作 a,a+1,...,a+9,即 a 與 &a[0]等價,表示第一個數(shù)組元素a[0]地址。由于指針變量值為地址,因此,可以定義指針變量,用來指向數(shù)組元素。

例如定義:int*p;則p=a;

則表示數(shù)組元素a[i]可以使用指針法:*(a+i)或*(p+i),從這個關(guān)系雖然可以說*(a+i)等價于*(p+i),但值得注意的是a和p并不等價,數(shù)組名可以說是常量指針,而p是變量指針,對于a,不可以使用“a++”,即數(shù)組名不能加加運算,a的值不能改變,而p是變量指針,因此可以進(jìn)行“p++”操作,如果有int*p;p=a;則p++;p的值為a+1。數(shù)組名是存儲地址的常量指針,因此數(shù)組名不能進(jìn)行自加自減等運算,而指針變量是變量,其值可以發(fā)生變化,可以進(jìn)行相應(yīng)的自加自減等運算。

數(shù)組除了一維數(shù)組之外,常還有二維數(shù)組和多維數(shù)組,由于多維數(shù)組比較復(fù)雜,較難理解,也不常用,暫不做介紹。

五、總結(jié)

指針是C語言的核心知識點,是C語言的精髓,正確理解和使用指針對C語言的學(xué)習(xí)至關(guān)重要。本文在教學(xué)實踐中,從指針的導(dǎo)入、指針概念的理解以及指針涉及的相關(guān)難點問題三方面進(jìn)行探討,層層深入、承上啟下,順序安排合理,便于學(xué)生全面理解指針的概念和用法,真正提高了學(xué)生C語言的編程能力。

[1]裴新鳳.如何正確地使用C語言的指針[J].西北民族學(xué)院學(xué)報,1999,20(6):41-43.

[2]高閣.C語言指針教學(xué)的研究與探討[J].機電產(chǎn)品開發(fā)與創(chuàng)新,2010,23(1):185-187.

[3]梅維安.C語言中指針教學(xué)方法 [J].陰山學(xué)刊,2009,23(4):93:95.

[4]劉井蓮,樊守芳,尚曉麗,包向輝,王志國.C語言函數(shù)教學(xué)實踐[J].通化師范學(xué)院學(xué)報,2011(8):58-60.

[5]趙衛(wèi)績,劉井蓮.實例教學(xué)法在C語言循環(huán)教學(xué)中的應(yīng)用[J].通化師范學(xué)院學(xué)報.2012(10):50-51.

[6]國家863中部軟件孵化器.C語言從入門到精通[M].人民郵電出版社,2010:236-237.

猜你喜歡
數(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)用
新乐市| 石楼县| 盐津县| 全南县| 大城县| 墨脱县| 辽宁省| 涟源市| 高台县| 东海县| 永城市| 麻城市| 黔江区| 平昌县| 绥阳县| 连山| 环江| 广安市| 剑阁县| 喀什市| 灌阳县| 富锦市| 东乡| 田林县| 淮滨县| 佳木斯市| 保亭| 大关县| 垣曲县| 玉溪市| 平定县| 凤台县| 乐昌市| 巍山| 大丰市| 霞浦县| 九龙坡区| 尚义县| 莫力| 饶阳县| 永年县|