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