C語言指針運用探討
摘 要:
摘 要:C語言是我們常用的一種計算機編程工具,在計算機的各個領(lǐng)域都得到廣泛的引用。C語言的指針是C語言編程技術(shù)中的核心,也是C語言中最具特色的部分。運用指針可以靈活的解決很多程序編輯問題,是很多其他高級程序編輯語言不能代替的。
關(guān)鍵詞:
關(guān)鍵詞:C語言 指針 計算機編程
1 C語言指針的基本內(nèi)涵
在C語言中存在一種指針變量,這種變量與普通的變量一樣在定義了之后都會在計算機中占據(jù)一定的位置,其中儲存這一定的數(shù)據(jù),只是這里面儲存的數(shù)據(jù)是一個地址。這個地址指示了另一個數(shù)據(jù)的位置。通常來說,對于指針變量的定義:指針類型數(shù)據(jù)的數(shù)據(jù)類型是關(guān)鍵字,指針變量中存放的數(shù)據(jù)是另一個數(shù)據(jù)的儲存地址,指針變量的性質(zhì)就是它儲存的位置中的數(shù)據(jù)的性質(zhì)。
2 C語言指針在應(yīng)用過程中的優(yōu)勢分析
C語言指針是C語言中的重要組成部分,在C語言的使用過程中如果能夠熟悉的使用C語言指針,能夠幫我們解決很多實際中的難題,可以使很多復雜的問題變得簡單。用指向性的單變量指針變量作為一個函數(shù)的參數(shù),能夠得到多個變化后的值。通常在運用函數(shù)調(diào)用都是有且只有一個函數(shù)值會被得到,而在應(yīng)用了指針函數(shù)之后,通過一個變量就能得到很多變化之后的值。在指向性數(shù)組之中是有指針函數(shù)的話能夠短時間內(nèi)得到很多的結(jié)果,對于數(shù)組的處理效率會得到很大的提升,所以說在熟練的掌握了數(shù)組之后可以用數(shù)組來處理數(shù)組能夠極為有效的提高對數(shù)組的處理效率。指向性的字符串在應(yīng)用了指針變量之后能夠減少數(shù)據(jù)儲存的空間,指針變量本身就可以儲存數(shù)據(jù)的位置,所以在使用了指針變量之后字符串的存儲空間能夠得到很大的提升,從而提高程序工作的效率。指向結(jié)構(gòu)體變量的指針作為函數(shù)的參數(shù)的時候能夠在很大程度上節(jié)省時間和存儲所占的空間,從而提高程序的執(zhí)行效率。指向量FILE類型的結(jié)構(gòu)體中應(yīng)用指示變量能夠很快的找到與之相關(guān)的文件,從而更快的實現(xiàn)對文件的訪問。
3 C語言指針運用中的問題
C語言指針在與C語言中的數(shù)組、函數(shù)以及運算符號結(jié)合之后,通常在說明的時候會具有很高的復雜行,使得人們對于指針的含義理解起來十分的困難,下面是對人們在使用C語言指針是所犯的錯誤。
3.1 懸游指針
懸游指針是一種使用的未進行出事話的指針p,這個指針并不是說沒有值,只是它的指示不確定的,同時,因為它的值不確定的原因,這個指針的指向也是不確定的,這中不確定性就有可能會破壞整個系統(tǒng)的正常工作,是一種很危險的指針類型,在使用過程中這種指針很有可能會對程序造成不可挽回的災(zāi)難性后果。
int a [5 ] , i ,* p;
fo r( i= 0; i < 5; i+ + ) scanf( "% d", p+ + ) ;
應(yīng)在fo r語句前加上語句"p= a; ",使p初始化[3 ] 。
3.2 指針指示類型錯誤
main( ) { static int a [3] [4 ]= { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; int* p; for ( p=a; p < a+ 12; p+ + ) printf ( "% d",* p) ; }
在這個程序當中將p=a【0】錯用為了p=a,雖然在程序當中a和a【0】的值是相同的,但是a【0】是一級int型指針,a是二級的,二者的指針類型不同,指示的對象也不行同,所以說這個程序之中p只能接受a【0】不能接受a。
3.3 指針偏移
main( ) {char * p, s [80]; p= s;
do {g ets( s) ;
w hi le(* p) print f ( "% x h",* p+ + ) ;
}w hi le( strcmp( s, "end") ; }
在上面的這個程序中,當指針初始化p=s進入循環(huán)之后p會進行自加,這可能會使得p的指針轉(zhuǎn)移到字符的其他位置中去,甚至可能會使p轉(zhuǎn)到字符串的另一變量或者程序代碼之中。這種情況是非常危險的,對于整個程序的運行來說都是可能會造成不可挽回的后果。
3.4 * 和[ ]在定義時只是說明作用, 不是運算符
&、* 、[ ]是C語言中的三種運算符號,他們的含義分別是地址運算符、指針運算符跟下標運算符。人們對于這三個運算符所代表的意義是很明確的,并沒有什么錯誤的理解。但是在實際的應(yīng)用中,很多人卻將他們看作是運算符號。&、* 、[ ]這三個運算符在運算的過程中只是起到說明的作用,并不能看做是運算符。
3.5 用整數(shù)值對指針進行賦值
在C語言之中,指針的值就是他所指向的地址,準確的說指針的數(shù)值在程序的運算過程過程中就是一個整數(shù)數(shù)值,,但是卻不能夠直接講一個整數(shù)的數(shù)值賦予給指針。因為指針的整數(shù)數(shù)值是有方向性的,但是在程序語言中的整數(shù)數(shù)值卻是沒有方向的。將這個沒有方向的整數(shù)數(shù)值賦予到指針的時候,指針就真的只是一個整數(shù)數(shù)值而不能指向一個地址。
int num;
int* pt;
num = 192635;
p= num;
最后一個語句的目的是使指針指向地址192635( 十進制), 編譯時系統(tǒng)會提示這個語句有錯誤。
3.6 指針之間值的相互賦予
# inc lude / a lloc. h0
m a in( )
{ int* m, * n;
m = ( int* ) m allo c( sizeof( int) ) ;
n= ( int* ) m a llo c( sizeof( int) );
* m = 78;
* n= 82;
m = n;
printf( d% d, % dd,
* m, * n); } [ 7]
在C語言之中,指針的值是可以相互賦予的,比如說在這個程序之中“m=n”就是講n的指向賦予給了m中去,但是原來已經(jīng)賦予給m的內(nèi)存空間卻沒有被釋放出去,使得這個內(nèi)存空間成為了無效的內(nèi)存空間,但是在實際的程序運行中又需要對m進行反復的應(yīng)用,這也就使得內(nèi)存空間變得十分的緊張。所以我們在進行指針之間值的賦予是通常會將被賦予的指針的內(nèi)存空間進行釋放,將其中的內(nèi)存空間賦予給一個無用的指針,然后再將有用的值賦予到該指針中去。使程序在反復運行時不會存在內(nèi)存不足的情況。指針之間的賦值不當會造成內(nèi)存緊張,嚴重的時候甚至會造成死機現(xiàn)象。
3.7 指針賦值只能存在于相同類型之間
C語言中的指針具有不同的類型,而在進行指針之間的賦值的時候,只能在相同類型的指針進行賦值。如果兩個指針的類型不相符合的話是不能夠進行賦值的。如果一個指針被賦予了其他類型指針的數(shù)據(jù),將會在程序的運行中造成錯誤。可能會造成程序的運行錯誤甚至于使得程序崩潰。
4 結(jié)語
C語言中的指針使得C語言的應(yīng)用變得十分靈活,使得許多問題的解決變得方便了很多。雖然說指針的應(yīng)用使得對問題的解決變得靈活簡單,但是許多C語言的初學者因為對指針的定義理解的不夠透徹,在使用指針的過程中會犯很多錯誤,影響程序的正常運行。
參考文獻:
[1]張威虎.C語言指針運用探討[J].延安大學學報:自然科學版,2000(3):25-27.
[2]史娟.C語言指針教學中的常見問題及教法探析[J].電腦知識與技術(shù),2012(17):4168-4169,4172.
[3]任磊.C語言指針的運用及常見錯誤分析[J].商丘師范學院學報,2008(12):91-93.
本文編號:14557
本文鏈接:http://sikaile.net/kejilunwen/jisuanjikexuelunwen/14557.html