摘 要:C語言是程序語言的重點,也是教學中的難點,本文對C語言教學中由淺入深地講解了一些C語言的重難點,通過用實例對它們的性質(zhì)進行詳細的解讀,讓學生更好地理解其中的區(qū)別。
關(guān)鍵詞:C語言;指針;函數(shù);數(shù)組
一、 指針變量的引用
指針變量使用時對以下得幾點要格外注意:
1. 對指針變量要先下定義,定義后,再使用。
2. 對指針變量進行操作時,要保持類型的一致性。例如:int i=50;char *p=&i;;對上述指針進行分析,可以得出上述指針是非法的。因為 int 后的i是整形變量,而char是定義字符變量,這兩個變量是不同類型的變量。
3. 當使用賦值給指針變量時,有一點要謹記,數(shù)值不可以直接賦值給指針變量,例如:int *p=52566,因為指針變量是儲存其他變量的地址。
4. 指針變量在每次被調(diào)用時,首先需要做的就是對初始變量進行初始化,例如:int *p;printf(“*p is %d”);這樣的操作就是不合法的,當程序員直接對變量進行使用時,沒有初始化,那就讓指針變量沒有所指。
5. 當使用指針變量進行算數(shù)運算時,不是變量p進行加法運算,直接變?yōu)閜+3,這樣是錯誤的,舉個例子:int a[5]={0,1,2,3,4};int *p=a;p+3;語句中,而是讓指針變量指向a[3],做一個假設(shè)int 占用4個字符,p+3相當于移動了12個字符。
6. 指針變量中有三個變量,這三個變量學生常常會弄混,具體使用時,就會犯錯。關(guān)于這三個變量就是const int *p;int const *p;const int const *p。const int *p,修飾*p是個const常量.而*p是指向?qū)ο蟮膬?nèi)容.所以表示指向?qū)ο蟮膬?nèi)容是常量,const變量不能被直接賦值,但是可以通過指針來修改const變量。由于const局部變量會存在棧里,而const全局變量會存在只讀存儲內(nèi)存上所以我們可以通過指針來修改const局部變量,但是修改const全局變量,會使程序崩潰。const變量則是真正的常量了,定義時會將其放入符號表中。所以編譯途中遇到使用const變量時,則直接從符號表中取出常量。只要當該const變量為全局(使用extern聲明過),或者被使用&操作符時,才會被分配存儲空間。int * const p,修飾 p是個const常量,而 p是指向?qū)ο蟮牡刂?所以表示指向?qū)ο蟮牡刂肥莻€常量。
二、 指針與數(shù)組
指向數(shù)組元素的指針變量的定義與以前的指針變量的定義一樣,有一點要注意的是保證數(shù)組的類型與指針變量的類型相同。例如:int i[5]={0,1,2,3,4};int *p=i;上述的兩條語句都是指向數(shù)組a的元素的指針向量p,同時對指針向量p進行了初始化,指針變量指向了數(shù)組的首元素a[0]。完成上述步驟,接下來我們就可以訪問數(shù)組元素了,通過使用指針變量p,例如:p+1就是指向a[1],很多學生在這里會迷惑,一定要記得,上述例子都是指針變量對一維數(shù)組元素進行訪問,而現(xiàn)實中對二維或者多維的數(shù)組元素應用比較多,所以我們對介紹一下二維數(shù)組的應用方法。例如:int a[3][4];int *p=a;我們需要對數(shù)組的a[2][3]進行訪問,為解決這個問題,我們可以使用以下方法。
p+1很多同學錯誤地理解為p單純地加1,其實是指針向量指出下一個數(shù)組元素。所以*(p+1)與a[1]等價。理解了上述的原理,我們可以很容易推理出以下規(guī)律,p+i(0≤i≤4)就可以表示p指向數(shù)組元素第a[i]元素,所以*(p+i)與a[i]等價。綜合上述的規(guī)律,我們可以推理出數(shù)組名與數(shù)組元素地址之間的聯(lián)系,所以有*(a+i)與*(p+i)等價。
1. 直接使用數(shù)組下標 a[2][3];
2. 利用一維數(shù)組名a訪問:*(a[2]+3)或*(a[0]+11)或 *(a[3]-1];
3. 利用二維數(shù)字名a進行訪問,我們需要將(2)中的一維數(shù)組進行改變,改成相應的二維數(shù)組名,這樣就可以實現(xiàn)了。*(*(a+2)+3)或 *(*(a+0)+11)或*(*(a+3)-1);
4. 用指針變量p訪問:*(*(p+2)+3)或*(*(p+0)+11)或*(*(p+3)-1)等等。
三、 指針與函數(shù)
指針函數(shù)是指函數(shù)的返回值為指針類型,通俗地說就是函數(shù)最后一個返回值,這個返回值不是一個數(shù)值,而是一個地址。指針函數(shù)的定義形式為:類型標識符 * 函數(shù)名(參數(shù)名){函數(shù)體}。
對上述的案例進行分析,上述實例中,我們需要先對全局變量a下定義,緊接著對變量a進行初始化,初始化的值是6,我們在對指針函數(shù)fun( )下定義,其返回類型為指向整型的指針,參數(shù)列表為空。全局變量a的地址是由fun( )函數(shù)返回的。主函數(shù)中對指針變量p進行定義,接著對p進行初始化操作,使其指向fun( )函數(shù),接著輸出p所指向?qū)ο蟮闹?,最后的結(jié)果是*p=6。指針函數(shù)完成上述操作后,就會對所占用的內(nèi)存進行釋放,釋放的內(nèi)存會被系統(tǒng)回收,所以指針函數(shù)不能返回局部變量的地址。
參考文獻:
[1]彭蕾.C語言指針教學難點淺析[J].科技情報開發(fā)與經(jīng)濟,2007(05):218-220.
[2]浙江趙國龍,顧鵬堯.C語言學習中的四大難點[N].電腦報,2003-09-15(C13).
作者簡介:
陳坤,湖南省長沙市,長沙財經(jīng)學校。