摘 要: 指針的應用在C語言中既是重點又是難點,本文作者對指針使用中出現(xiàn)的常見問題作了簡要的歸納、分析、總結,希望能對C語言初學者起到一定的幫助作用。
關鍵詞: C語言 指針 應用 常見問題
指針是C語言中的一個重要概念,指針的應用也是C語言中最重要的一個內容。具有指針類型的變量(即指針變量)可以存放其他變量的地址,能有效地表示數(shù)據(jù)之間復雜的邏輯關系。正確而靈活地運用指針可以給程序設計帶來許多方便,比如可以有效地表示復雜的數(shù)據(jù)結構、動態(tài)分配內存、方便地使用字符串,在調用函數(shù)時能夠得到多于一個的和可以直接處理內存地址等。
能否正確理解和使用指針是我們是否掌握C語言的一個標志。但是由于指針太過靈活,一旦使用不當,不僅錯誤難查,而且會出現(xiàn)意想不到的錯誤。因此,要編出正確而高效的程序,必須正確地理解和使用指針。本文著重分析了指針應用中的若干常見問題,以幫助初學者更好地掌握指針。
一、指針變量在初始化時應注意的問題
1.“*”在使用時有不同的含義:在聲明變量時用在變量的前面,其作用是說明該變量為指針變量,其它情況用在指針變量前面作為指針運算符。
如:int *P,i=5;(*用在P前面,說明P為指針變量)
P=i;
printf(“%d\”,*P);(*用在P前面。作為指針運算符)
又如:int *p=1;等價于int *p;p=1;兩條語句的組合。
2.不能給未初始化的指針賦值。
main( )
{int i,*P;
i=5;
*P=8;
return 0;
}
指針在未初始化的時候,它的指向是不確定的,因此對它的運算是不正確的。也有可能會帶來“災難性”的后果,在使用指針前要使它有個確切的指向,在語句i=5和*P=8之間加一條語句P=i即可,這樣就讓指針變量P有了明確的指向。
二、指針變量在賦值時應注意的問題
1.給指針變量賦值必須是地址值[1],不能賦予任何其它數(shù)據(jù)。C語言中提供了地址運算符“”來表示變量的地址。其一般形式為:變量名;如a表示變量名a的地址。
例如:int b;int *p;p=b;此為正確的賦值方法。但有時會有如下錯誤書寫:int *p;p=156;這樣就使指針p指向了地址156(十進制),編譯時系統(tǒng)會提示出錯。
2.不同類型的指針不能相互賦值
指針是具有具體類型的,在給指針賦值時,不但要求是地址,而且應該是一個與該指針類型相符的變量或者常量的地址。
例如:“int *p;float a=3.4,*q=a;p=q;”以上語句中在“p=q;”這條語句上存在錯誤,因為p是一個整型指針,只能存放int型數(shù)據(jù)的地址,而q指向的是一個實數(shù)型變量,里面存放的是float型數(shù)據(jù)。二者不相匹配,因此在編譯時會發(fā)生錯誤。
三、指針變量用于數(shù)組時應注意的問題
1.數(shù)組名與指針變量的區(qū)別。指針常用于數(shù)組中,數(shù)組名代表數(shù)組的起始地址[2]。可將數(shù)組名賦給一個指針變量,即該指針變量指向了該數(shù)組,從而使得訪問數(shù)組可以采用地址法(訪問數(shù)組元素還可用下標法)。指向數(shù)組的指針變量可以作加減法的運算,且只有指向同一數(shù)組,兩個指針變量可作減法(結果為相隔的元素個數(shù))及關系運算。