指針數組的定義
如果數組的元素都是指針類型,那麼我們就把這種叫做指針數組。指針數組是如下定義的:
類型名字 *數組名[常量表達式]
我們以前學習的時候知道如果數組的元素如何是char型,那麼這個就是char型數組,如何數組元素都是int型,那麼這個就叫int型數組,在這裡呢,如果數組元素都是指針,那麼這個就是指針數組。
大家發現沒有,指針數組也沒有什麼特別的,只是它的元素都是指針。那麼我們在使用它的時候就和其他整型數組沒有太大的區別。
例子: int *x[10]
通過前面的解釋,那麼我很容易回到道這個是表示,x是一個數組,裡面有10個元素,每個元素是一個指針指向整型。嘿嘿!是不是很簡單啊!原來就是把指針放數組裡啦!就好比以前“串串香竹簽”上的土豆編程了指針了。指針是一種抽象,在計算機中用來表示地址加其解釋方式。
那麼我們現在思考一個問題啊,這個int *x[10]求長度會是多少呢,嘿嘿!聰明的你1下子就想到了,指針嘛!在32位系統中是4字節的,那麼這裡有10個,那就是40字節啦!
指針數組的主要應用
指針數組從它的定義我們便知道它是主要用來管理同種類型的指針,其實最常見的就是用來管理字符串。
現在呢,我們還是老辦法,先看指針數組的內存形式,這樣我們再應用就會思路更清晰啦!
大家是不是覺得指針數組很好玩啊!aString數組裡面放的3個4字節指針啦!。大家一定要注意啊,上面的和 char aString[]="............" 這樣的形式是不一樣的啊,這種形式是把字符串放在數組裡的哦!指針數組中數組裡放的只是指針哦!是指向字符串的指針,也就是字符串的首地址。那麼我們現在去看看真正的字符串在哪裡啊,嘿嘿,大家一看地址就知道啦,第一個字符串的地址是00422080啊,然後依次挨著放的。好,我們去那個地址看看,到底是不是這樣啦!
呵呵!大家看到了吧!數組裡面全部是記錄的指針吧!
一個很必要的對比
下面大家來看1個例子,我們來仔細分析下:
#include void main() { char *aStringA[]= { "Im not afraid to take a stand", "Well walk this road together, through the storm", "Whatever weather, cold or warm" }; char aStringB[][60]= { "Im not afraid to take a stand", "Well walk this road together, through the storm", "Whatever weather, cold or warm" }; }
對於這個例子呢!如何輸出的話。2個結果都一樣的!但是它們有什麼區別呢?!大家好好回憶下我之前的筆記,然後我們做以下區別的總結:
1,第一個數組字符串在常量區,第二個數組字符串在棧區。
2,第一個數組的長度是12字節,第二個數組長度是180字節。
3,第一個數組就像高級語言的變長數組,第二個數組就相當於定長數組擁有很快的尋址能力
4,第一個數組做元素交換很方便,只需要交換指針。第二個數組做交換就得把整個元素都抄下來然後交換