在c語(yǔ)言中什么是指針
在c語(yǔ)言中什么是指針
為了說(shuō)清楚什么是指針,必須弄清楚數(shù)據(jù)在內(nèi)存中是如何存儲(chǔ)的,又是如何讀取的。
如果在程序中定義了一個(gè)變量,在編譯時(shí)就給這個(gè)變量分配內(nèi)存單元。系統(tǒng)根據(jù)程序中定義的變量類(lèi)型,分配一定長(zhǎng)度的空間。例如,C++編譯系統(tǒng)一般為整型變量分配4個(gè)字節(jié),為單精度浮點(diǎn)型變量分配4個(gè)字節(jié),為字符型變量分配1個(gè)字節(jié)。內(nèi)存區(qū)的每一個(gè)字節(jié)有一個(gè)編號(hào),這圖6.1就是“地址”。
圖6.1
請(qǐng)務(wù)必弄清楚一個(gè)內(nèi)存單元的地址與內(nèi)存單元的內(nèi)容這兩個(gè)概念的區(qū)別。在程序中一般是通過(guò)變量名來(lái)對(duì)內(nèi)存單元進(jìn)行存取操作的。其實(shí)程序經(jīng)過(guò)編譯以后已經(jīng)將變量名轉(zhuǎn)換為變量的地址,對(duì)變量值的存取都是通過(guò)地址進(jìn)行的。這種按變量地址存取變量值的方式稱(chēng)為直接存取方式,或直接訪問(wèn)方式。
還可以采用另一種稱(chēng)為間接存取(間接訪問(wèn))的方式。可以在程序中定義這樣一種特殊的變量,它是專(zhuān)門(mén)用來(lái)存放地址的。
圖6.2是直接訪問(wèn)和間接訪問(wèn)的示意圖。為了將數(shù)值3送到變量中,可以有兩種方法:
直接將數(shù)3送到整型變量i所標(biāo)識(shí)的單元中。見(jiàn)圖6.2(a)。
將3送到指針變量i_pointer所指向的單元(這就是變量i所標(biāo)識(shí)的單元)中。見(jiàn)圖6.2(b)。
圖6.2
所謂指向,就是通過(guò)地址來(lái)體現(xiàn)的。
由于通過(guò)地址能找到所需的變量單元,因此可以說(shuō),地址指向該變量單元。因此將地址形象化地稱(chēng)為“指針”,一個(gè)變量的地址稱(chēng)為該變量的指針。
如果有一個(gè)變量是專(zhuān)門(mén)用來(lái)存放另一變量地址(即指針)的,則它稱(chēng)為指針變量。指針變量的值(即指針變量中存放的值)是地址(即指針)。