- 相關(guān)推薦
c語言中指針的使用方法
在c語言的學(xué)習(xí)中,我們遇到的最大問題莫過于指針的使用了。指針是C語言的一大特色,使用指針我們可能靈活的訪問內(nèi)存。但這一大特性也同時給我們帶來了很大的問題,不當(dāng)?shù)氖褂弥羔樉蜁o我們程序帶來大的災(zāi)難,F(xiàn)在我就給大家講一講我使用指針的一些體會吧。
一、定義指針的時候一定要初始化。
變量定義的時候給變量初始化,這是保證不出錯的一個很好的習(xí)慣。尤其是在指針的使用上,如果我們沒有給指針初始化,就會出現(xiàn)野指針,該指針的指向并不是我們所希望的,一旦錯誤的釋放了這個指針,就會發(fā)生內(nèi)存的訪問。那么如何初始化指針變量呢,一般有以下幾種方法:
1、初始化空指針
int* pInteger=NULL;
2、用已有的變量初始化
int length=5;
int* pInteger=&length;
3、用內(nèi)存分配函數(shù)給指針分配空間
int* pInteger=(int*)malloc(10*sizeof(int));//為指針分配大小為10個整數(shù)的內(nèi)存空間。
二、正確的申請和釋放內(nèi)存
指針使用之后,如果不釋放指針?biāo)褂玫膬?nèi)存,就會造成內(nèi)存的泄露,這樣就會有大量內(nèi)存由于沒能釋放,別的程序不可以使用這部分內(nèi)存,如果一個程序不停申請內(nèi)存而不去釋放內(nèi)存,很快就會造成系統(tǒng)的崩潰。那么如何正確的申請和釋放內(nèi)存呢。
1、指針初始化,上面已講
2、正確的申請內(nèi)存
如何申請內(nèi)存才算是正確的申請內(nèi)存呢?首先要判斷指針是否為空,如果不為空,則釋放該指針?biāo)赶虻膬?nèi)存塊,如果不釋放這塊內(nèi)存,而直接就申請內(nèi)存,就會造成內(nèi)存的泄露。申請內(nèi)存后,一定要判斷是否申請成功。
如:int* pInteger=NULL;//指針定義處
...
if(pInteger != NULL)
{
free(pInteger);
pInteger=NULL;//指針釋放之后并不為空,要設(shè)置其為空
}
pInteger=(int*)malloc(10*sizeof(int));
if(pInteger != NULL)
{
printf("內(nèi)存申請沒有成功\n!");
exit(0);
}
...
3、內(nèi)存釋放
程序使用完了指針,一定要記得釋放指針指向的內(nèi)存。釋放后一定要記得設(shè)置指針為空指針。因為free函數(shù)在釋放指針后,只是單純的釋放了該指針指向的內(nèi)存空間,而沒有將指針賦為空值。所以一定要記得在釋放指針后將指針賦為空值。
如:
int* pInteger=NULL;//指針定義處
...
free(pInteger);//釋放指針
pInteger=NULL; //指針賦為空值
三、使用指針時一定要判斷指針是否為空
在使用指針時一定要判斷指針是否為空,如果為空,則做相應(yīng)的操作。如果不做判斷,則可能錯誤的使用空指針。
如:char* dest=NULL;
...
strcpy(dest,"string");//如果dest為空則出錯
正確的使用方法為:
if(dest == NULL)
{
dest=(char*)malloc(7*sizeof(char));//因為字符串以“\0”結(jié)束,
//所以要申請7個字符的內(nèi)存
//判斷內(nèi)存申請是否成功
...
}
strcpy(dest,"string");
在指針的使用過程中,基本上要注意的問題就是這些,如果你嚴(yán)格的按照上面的方法使用指針,那么,你就可以避免常見的指針錯誤了。希望這篇文章可以給你帶來幫助,不過在指針的使用過程中,還會遇到很多的問題。希望和大家一起分享。
【c語言中指針的使用方法】相關(guān)文章:
如何理解C語言指針03-27
c語言指針運用中堆和棧的區(qū)別04-27
C語言中指針的概念03-16
C語言中的指針是什么03-17
C語言指針知識點03-29
C語言中的指針和內(nèi)存泄漏03-19
c語言之指針基礎(chǔ)知識12-04