999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

指針教學實踐

2013-04-23 03:03:18劉井蓮趙衛績馬春華
綏化學院學報 2013年3期

劉井蓮 趙衛績 馬春華

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

一、序言

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

二、導入

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

三、初識指針變量

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

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

實例1:

#include

int main()

{int i=13;

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

i=13&i=1245052

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

(二)指針變量性質

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

實例2:

輸出結果:

i=13&i=1245052

p=1245052&p=1245048

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

(三)指針變量存儲

指針變量在內存中占4個字節,與指向的變量的數據類型無關。下面以實例3說明如下。

實例3:輸出結果:

size of c=1 size of i=4

size of p1=4 size of p2=4

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

(四)“*”運算符

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

實例4:

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

四、指針的相關問題探討

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

(一)函數與指針

普通變量可以作為函數參數,指針變量也是變量,當然也可以作為函數參數,具體用法見實例5。

實例5:

輸出結果:

i=5&i=1245052

p=1245052*p=5&p=1244972

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

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

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

實例6:

輸出結果:

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

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

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

(二)數組與指針

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

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

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

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

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

五、總結

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

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

[2]高閣.C語言指針教學的研究與探討[J].機電產品開發與創新,2010,23(1):185-187.

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

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

[5]趙衛績,劉井蓮.實例教學法在C語言循環教學中的應用[J].通化師范學院學報.2012(10):50-51.

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

主站蜘蛛池模板: 成人在线亚洲| 这里只有精品在线| 青青青草国产| 97人妻精品专区久久久久| 99久久国产自偷自偷免费一区| 亚洲日韩精品综合在线一区二区| 亚洲第一视频网| 国国产a国产片免费麻豆| 国产精品99久久久久久董美香| 亚洲精品片911| 亚洲精品视频网| 国产91蝌蚪窝| 亚洲日本中文字幕乱码中文 | 久久久久中文字幕精品视频| 2021国产在线视频| 免费在线不卡视频| 欧美不卡视频一区发布| 色综合天天综合| 999国产精品| 国产亚洲精品精品精品| 国产在线精品99一区不卡| 国产主播在线观看| 成人午夜天| 日本成人不卡视频| 国产欧美在线观看精品一区污| 久久99国产精品成人欧美| 自慰网址在线观看| 精品一区国产精品| 亚洲一区二区三区国产精华液| 亚洲人成网站18禁动漫无码| 亚洲成人精品久久| 国产乱子伦视频三区| 又粗又大又爽又紧免费视频| 国产内射一区亚洲| 日韩精品一区二区三区中文无码| 波多野结衣第一页| 亚洲一级毛片| 久久视精品| 在线观看无码av五月花| 日本福利视频网站| 91探花国产综合在线精品| 婷婷久久综合九色综合88| 伊人久久久久久久久久| 无码粉嫩虎白一线天在线观看| 日韩精品一区二区深田咏美| 亚洲av无码专区久久蜜芽| 99热这里只有精品5| 亚洲欧美不卡视频| 福利一区在线| 在线精品视频成人网| 欧美日韩第二页| 日韩经典精品无码一区二区| 好吊妞欧美视频免费| 欧美综合激情| 亚洲AV人人澡人人双人| 日本免费福利视频| 精品剧情v国产在线观看| 精品视频在线一区| 婷婷色婷婷| 毛片免费视频| 国产欧美精品一区二区| 高清免费毛片| 波多野衣结在线精品二区| a级毛片免费网站| 欧美一级99在线观看国产| 亚洲六月丁香六月婷婷蜜芽| 欧美第一页在线| 亚洲高清中文字幕在线看不卡| 国产成年无码AⅤ片在线| 久久精品视频一| 91香蕉视频下载网站| 日本一区高清| 成人欧美日韩| 免费jjzz在在线播放国产| 91精品日韩人妻无码久久| 亚洲美女一区二区三区| 91精品aⅴ无码中文字字幕蜜桃 | 国产精品尹人在线观看| 国产肉感大码AV无码| 国产精品区网红主播在线观看| 亚洲无码高清一区| 精品久久久久久成人AV|