指針的簡(jiǎn)單教程
C語(yǔ)言中,指針是一種廣泛使用的數(shù)據(jù)類(lèi)型。利用指針編程是C語(yǔ)言最主要的風(fēng)格之一。指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu),方便地使用數(shù)組和字符串,并且能夠像匯編語(yǔ)言一樣處理內(nèi)存地址,從而編寫(xiě)出精練而高效的程序。指針
C語(yǔ)言中,指針是一種廣泛使用的數(shù)據(jù)類(lèi)型。利用指針編程是C語(yǔ)言最主要的風(fēng)格之一。指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu),方便地使用數(shù)組和字符串,并且能夠像匯編語(yǔ)言一樣處理內(nèi)存地址,從而編寫(xiě)出精練而高效的程序。指針極大地豐富了C語(yǔ)言的功能。學(xué)習(xí)指針是學(xué)習(xí)C語(yǔ)言中最重要的一環(huán),能否正確理解和使用指針是我們是否掌握C語(yǔ)言的一個(gè)標(biāo)志。同時(shí),指針也是C語(yǔ)言中最為困難的一部分,在學(xué)習(xí)中除了要正確理解基本概念,還必須要多編程,上機(jī)調(diào)試。只要作到這些,指針也是不難掌握的。
C語(yǔ)言地址指針的基本概念
在計(jì)算機(jī)中,所有的數(shù)據(jù)都是存放在存儲(chǔ)器中的。一般把存儲(chǔ)器中的一個(gè)字節(jié)稱(chēng)為一個(gè)內(nèi)存單元,不同的數(shù)據(jù)類(lèi)型所占用的內(nèi)存單元數(shù)不等,如整型量占2個(gè)單元,字符量占1個(gè)單元等。為了正確地訪(fǎng)問(wèn)這些內(nèi)存單元,必須為每個(gè)內(nèi)存單元編上號(hào),即給每個(gè)內(nèi)存單元分配一個(gè)唯一的地址。這個(gè)地址就是指針,也可以說(shuō)是內(nèi)存單元的編號(hào)。
在C語(yǔ)言中,允許用一個(gè)變量來(lái)存放指針,這種變量稱(chēng)為指針變量。指針變量的值即為某個(gè)內(nèi)存單元的地址,也可以說(shuō)是某個(gè)內(nèi)存單元的指針。嚴(yán)格地說(shuō),一個(gè)指針是一個(gè)地址,是一個(gè)常量。而一個(gè)指針變量卻可以被賦予不同的指針值,是變量。但通常把指針變量簡(jiǎn)稱(chēng)為指針。定義指針的目的是為了通過(guò)指針去訪(fǎng)問(wèn)內(nèi)存單元。
變量的指針和指針變量
變量的指針就是變量的地址,存放變量地址的變量是指針變量。在C語(yǔ)言中,允許用一個(gè)變量來(lái)存放指針,這種變量稱(chēng)為指針變量。指針變量的值即為某個(gè)變量的地址,也可以說(shuō)是某個(gè)變量的指針。
為了表示指針變量和它所指向的變量之間的關(guān)系,在程序中用“*”符號(hào)表示“指向”,例如,`i_pointer`代表指針變量,而`*i_pointer`是`i_pointer`所指向的變量。因此,下面兩個(gè)語(yǔ)句作用相同:
```
i 3;
*i_pointer 3;
```
第二個(gè)語(yǔ)句的含義是將3賦給指針變量`i_pointer`所指向的變量。
定義一個(gè)指針變量包括三個(gè)內(nèi)容:指針類(lèi)型說(shuō)明、指針變量名和變量值(指針)所指向的變量的數(shù)據(jù)類(lèi)型。其一般形式為:
```
類(lèi)型說(shuō)明符 *變量名;
```
其中,`*`表示這是一個(gè)指針變量,變量名即為定義的指針變量名,類(lèi)型說(shuō)明符表示本指針變量所指向的變量的數(shù)據(jù)類(lèi)型。
例如:
```
int *p1; // p1是一個(gè)指針變量,它的值是某個(gè)整型變量的地址
float *p2; /* p2是指向浮點(diǎn)變量的指針變量 */
char *p3; /* p3是指向字符變量的指針變量 */
```
通過(guò)訪(fǎng)問(wèn)指針變量,可以取得數(shù)組或函數(shù)的首地址,從而找到該數(shù)組或函數(shù)。這樣一來(lái),凡是出現(xiàn)數(shù)組和函數(shù)的地方都可以用一個(gè)指針變量來(lái)表示,只要該指針變量中賦予數(shù)組或函數(shù)的首地址即可。這樣做將會(huì)使程序的概念十分清楚,程序本身也更加精練和高效。在C語(yǔ)言中,一種數(shù)據(jù)類(lèi)型或數(shù)據(jù)結(jié)構(gòu)往往占有一組連續(xù)的內(nèi)存單元。用“地址”這個(gè)概念并不能很好地描述一種數(shù)據(jù)類(lèi)型或數(shù)據(jù)結(jié)構(gòu),而“指針”雖然實(shí)際上也是一個(gè)地址,但它卻是一個(gè)數(shù)據(jù)結(jié)構(gòu)的首地址,它是“指向”一個(gè)數(shù)據(jù)結(jié)構(gòu)的,因此概念更為清楚,表示更為明確。這也是引入“指針”概念的一個(gè)重要原因。