指針在c語(yǔ)言中是什么
指針在c語(yǔ)言中是什么
在計(jì)算機(jī)中,所有的數(shù)據(jù)都是存放在內(nèi)存中的,一般把內(nèi)存中的一個(gè)字節(jié)稱為一個(gè)內(nèi)存單元,不同的數(shù)據(jù)類型所占用的內(nèi)存單元數(shù)不一樣,如int占用4個(gè)字節(jié),char占用1個(gè)字節(jié)。為了正確地訪問(wèn)這些內(nèi)存單元,必須為每個(gè)內(nèi)存單元編上號(hào)。每個(gè)內(nèi)存單元的編號(hào)是唯一的,根據(jù)編號(hào)可以準(zhǔn)確地找到該內(nèi)存單元。
內(nèi)存單元的編號(hào)叫做地址(Address),也稱為指針(Pointer)。
內(nèi)存單元的指針和內(nèi)存單元的內(nèi)容是兩個(gè)不同的概念。 可以用一個(gè)通俗的例子來(lái)說(shuō)明它們之間的關(guān)系。我們用銀行卡到ATM機(jī)取款時(shí),系統(tǒng)會(huì)根據(jù)我們的卡號(hào)去查找賬戶信息,包括存取款記錄、余額等,信息正確、余額足夠的情況下才允許我們?nèi)】?。在這里,卡號(hào)就是賬戶信息的指針, 存取款記錄、余額等就是賬戶信息的內(nèi)容。對(duì)于一個(gè)內(nèi)存單元來(lái)說(shuō),單元的地址(編號(hào))即為指針,其中存放的數(shù)據(jù)才是該單元的內(nèi)容。
在C語(yǔ)言中,允許用一個(gè)變量來(lái)存放指針,這種變量稱為指針變量。因此,一個(gè)指針變量的值就是某個(gè)內(nèi)存單元的地址或稱為某內(nèi)存單元的指針。
設(shè)有字符變量C,其內(nèi)容為 'K'(ASCII碼為十進(jìn)制數(shù) 75),C占用了011A號(hào)單元(地址通常用十六進(jìn)數(shù)表示)。設(shè)有指針變量P,內(nèi)容為011A,這種情況我們稱為P指向變量C,或說(shuō)P是指向變量C的指針。
嚴(yán)格地說(shuō),一個(gè)指針是一個(gè)地址,是一個(gè)常量。而一個(gè)指針變量卻可以被賦予不同的指針值,是變量。但常把指針變量簡(jiǎn)稱為指針。為了避免混淆,本教程約定:“指針”是指地址,是常量,“指針變量”是指取值為地址的變量。定義指針的目的是為了通過(guò)指針去訪問(wèn)內(nèi)存單元。
既然指針變量的值是一個(gè)地址,那么這個(gè)地址不僅可以是變量的地址,也可以是其它數(shù)據(jù)結(jié)構(gòu)的地址。在一個(gè)指針變量中存放一個(gè)數(shù)組或一個(gè)函數(shù)的首地址有何意義呢?
因?yàn)閿?shù)組或函數(shù)都是連續(xù)存放的。通過(guò)訪問(wèn)指針變量取得了數(shù)組或函數(shù)的首地址,也就找到了該數(shù)組或函數(shù)。這樣一來(lái),凡是出現(xiàn)數(shù)組,函數(shù)的地方都可以用一個(gè)指針變量來(lái)表示,只要該指針變量中賦予數(shù)組或函數(shù)的首地址即可。這樣做,將會(huì)使程序的概念十分清楚,程序本身也精練、高效。
在C語(yǔ)言中,一種數(shù)據(jù)類型或數(shù)據(jù)結(jié)構(gòu)往往都占有一組連續(xù)的內(nèi)存單元。用“地址”這個(gè)概念并不能很好地描述一種數(shù)據(jù)類型或數(shù)據(jù)結(jié)構(gòu),而“指針”雖然實(shí)際上也是一個(gè)地址,但它卻是一個(gè)數(shù)據(jù)結(jié)構(gòu)的首地址,它是“指向”一個(gè)數(shù)據(jù)結(jié)構(gòu)的,因而概念更為清楚,表示更為明確。 這也是引入“指針”概念的一個(gè)重要原因。