淺談C語言中指針的教學(xué)
C語言是一門通用計算機編程語言,應(yīng)用廣泛。C語言的設(shè)計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產(chǎn)生少量的機器碼以及不需要任何運行環(huán)境支持便能運行的編程語言。
摘要:C語言數(shù)據(jù)類型非常豐富,其中一個重要的數(shù)據(jù)類型是指針,利用指針可以直接實現(xiàn)對內(nèi)存的數(shù)據(jù)進行快速處理、實現(xiàn)函數(shù)間的調(diào)用等。但是由于指針概念較為復(fù)雜,使用起來非常靈活,所以對于大一的新生初次學(xué)習(xí)程序語言設(shè)計,在學(xué)習(xí)到指針這一數(shù)據(jù)類型的時候往往難以掌握。因此在教學(xué)中,教師需要根據(jù)學(xué)生的實際情況合理的安排這一知識點的學(xué)習(xí),一般可以按照數(shù)據(jù)在內(nèi)存中的存儲方式合理地進行教學(xué)設(shè)計,幫助學(xué)生理解指針的概念,從而熟練掌握指針的使用。
關(guān)鍵詞:指針;內(nèi)存;程序
一、指針的概念
首先要讓學(xué)生明確指針也是一種數(shù)據(jù)類型。為了讓學(xué)生很好的理解指針到底是一種什么樣的數(shù)據(jù)類型,就必須讓學(xué)生理解數(shù)據(jù)在內(nèi)存中是如何存儲的。內(nèi)存是以字節(jié)為單位的一片連續(xù)的存儲空間,每一個字節(jié)單元都對應(yīng)著一個唯一的存儲單元的編號,這個存儲單元的編號就稱為內(nèi)存單元的地址,簡稱地址?梢耘e例學(xué)生宿舍,內(nèi)存單元的地址就相當于我們學(xué)生所在宿舍的房間號,在內(nèi)存地址所標識的內(nèi)存單元中所存放的數(shù)據(jù),就相當于學(xué)生宿舍里入住的學(xué)生一樣,可以有單人間,雙人間,四人間等等。即根據(jù)數(shù)據(jù)類型的不一樣,分配不同的存儲空間。如下定義:char n; float d;int m ; 變量的類型不一樣,內(nèi)存為各自分配存儲空間也不一樣。由于變量n是字符型數(shù)據(jù),所以內(nèi)存分配其1個字節(jié)的存儲單元;變量d是浮點型數(shù)據(jù),所以內(nèi)存分配其4個字節(jié)的存儲單元;變量m是整型數(shù)據(jù),所以內(nèi)存分配其2個字節(jié)的存儲單元。所謂變量的地址就是內(nèi)存為各變量所分配的存儲空間的第一個字節(jié)單元的地址。即地址就是用來標識數(shù)據(jù)的存儲單元的一種數(shù)據(jù)類型,方便用戶對存儲在各自單元中的數(shù)據(jù)進行正確的訪問,在C語言中就將地址稱為指針。指針可以用來指向變量、結(jié)構(gòu)體\\數(shù)組及其元素以及指針等。
二、區(qū)分變量、變量名、變量的地址和變量值
為了更好的理解指針這種類型的數(shù)據(jù),我們先來理解一下變量、變量名、變量的地址和變量值的區(qū)別。所謂的變量即命名的內(nèi)存空間。變量在內(nèi)存中占有一定空間,用于存放各種相應(yīng)類型的數(shù)據(jù);所謂的變量名即給內(nèi)存空間所取的一個容易記憶的名字;所謂的變量的地址即變量所使用的內(nèi)存空間的地址(內(nèi)存單元的.編號);所謂的變量值即所對應(yīng)的內(nèi)存單元中存放的數(shù)值。
三、指針變量的定義、賦值和引用
(一)指針變量的定義格式:基類型 *變量名;
例如: int *n; /*定義一個指向整數(shù)據(jù)的指針變量n*/
char *m; /*定義一個指向字符型數(shù)據(jù)的指針變量m*/
float *p; /*定義一個指向浮點型數(shù)據(jù)的指針變量p*/
注意:C語言所有的變量必須是先定義然后再使用。指針變量也必須如此,為了表示指針變量是存放地址的一種特殊變量,所以在定義變量時會在變量名前加“*”號;指針變量的基類型表示指針變量所指向數(shù)據(jù)的類型,因各數(shù)據(jù)類型占用的存儲空間不一樣,指針變量的某些操作具有特殊的含義。如指針變量加1,不是純粹的加1個字節(jié), 而是加一個所指向變量的字節(jié)個數(shù),例如:int *p, b=100; p=&b;其中執(zhí)行p++;指的是p值加2個字節(jié)。
(二)指針變量的賦值方法
(1)變量的地址賦值給指針變量,例如:int a, *p;p=&a;
(2)相同類型的指針變量之間賦值,例如:int a, *p1,*p2;p1=&a;p2=p1;
(3)賦空值NULL,例如:int *p1 =NULL;
(三)指針變量的具體使用
首先區(qū)分“&”運算符和“*”運算符。“&”運算符表示取變量的地址, “*”運算符表示訪問指針變量所指向的變量的值。在定義指針變量時”*”是指針變量的標志,沒有特殊含義,但在具體使用中要注意,在指針變量前加了”*”, 表示取其所指向變量的值。從變量名獲得變量地址用“&”運算符,從地址獲得地址指向的數(shù)據(jù)用“*”運算符。
例如:int a=3,*p=&a;
具體訪問數(shù)據(jù)時,可以按變量名直接訪問,如:a=3;而利用指向變量的的指針去訪問屬于間接訪問,即變量a的地址(指針)存放在指針變量p中,p=&a(p指向a),然后利用指針變量p進行變量a的訪問*p=3,這就是間接訪問。
四、指針變量可以作為函數(shù)的參數(shù)
指針變量和其它數(shù)據(jù)類型的變量一樣也作為函數(shù)參數(shù),區(qū)別只是傳遞的內(nèi)容是一個地址值。而且可以通過這個地址值間接改變實參、形參所共同指向的變量的值。
例如:輸入a,b,交換a,b數(shù)據(jù)后輸出。
void fun(int *p1, int *p2)
{int temp;
temp=*p1;
*p1=*p2 ;
*p2=temp;}
main()
{int a=3,b=5,*pa, *pb;
pa=&a;
pb=&b;
fun(pa,pb);
printf(“swaped:\n”);
printf(“a=%d,b=%d\n”,a,b);}
五、總結(jié)
本文主要介紹了指針的基本概念及其使用。由于指針這種數(shù)據(jù)類型比較靈活,所以學(xué)生剛開始使用時容易出錯,可以通過指導(dǎo)學(xué)生上機調(diào)試程序,弄清程序中的細節(jié),區(qū)分指針與其它數(shù)據(jù)類型的區(qū)別,累積編程得經(jīng)驗,以達到熟練的使用它。
參考文獻:
[1]董漢麗.C語言程序設(shè)計[M].大連:大連理工出版社,2002.
【淺談C語言中指針的教學(xué)】相關(guān)文章:
3.C語言中一個結(jié)構(gòu)不能包含指向自己的指針
4.C 語言循環(huán)結(jié)構(gòu)教學(xué)中案例教學(xué)的應(yīng)用和探討論文
9.C語言編程題