1. 程式人生 > >指標陣列的定義和引用

指標陣列的定義和引用

指標陣列是一種特殊的陣列,指標陣列的陣列元素都是指標變數。指標陣列的定義格式為:
型別名稱 *陣列名稱[陣列長度];
例如:float *pf[3];
因為下標運算子[]的優先順序高於指標運算子*,上述定義等價於:float * (pf[3]);
說明pf是一個含有3個元素的陣列,陣列元素為指向float型變數的指標變數。
又如:
int *pn[5]; /*定義一個5個元素的指標陣列,陣列元素為指向int型變數的指標變數*/
char *pc[10]; /*定義一個10個元素的指標陣列,元素為指向char型變數的指標變數*/
不論指標陣列是什麼型別,指標陣列的每個陣列元素都用來儲存一個地址值,在TurboC下,每個陣列元素是一個unsigned int型變數,佔用2個位元組。
指標陣列定義後,可以使陣列元素指向一個變數和其他陣列的首地址。下面是一個指標陣列定義和引用的例子。
main()
{
int i;
char c1[]="How";
char c2[]="are";
char *c3="you";
char *pArray[3];
pArray[0]=c1;
pArray[1]=c2;
pArray[2]=c3;
for(i=0;i<3;i++)
printf("%s ", pArray[i]);
}
程式執行的結果為:
How are you
說明:
(1)程式中c1,c2被定義為字元陣列並初始化;c3是一個指標變數,指向字串所在字元陣列的首地址。
(2)語句char *pArray[3];定義了三個元素的指標陣列pArray,陣列元素是指向char型變數或陣列的指標變數。
(3)語句pArray[0]=c1;將字元陣列c1的首地址賦給pArray[0],指標變數pArray[0]指向了c1的首地址。
(4)for迴圈中,語句printf("%s ", pArray[i]);依次列印了三個字元陣列的內容。比如,pArray[0]裡存放了c1的首地址,printf("%s ", pArray[0])和printf("%s ", c1)的作用是相同的。
字元陣列c1,c2,c3和指標陣列pArray的記憶體情況如下圖(圖中的陣列首地址值是假設的值)。
指標陣列pArray佔用了從FFC0開始的6個位元組。char型變數佔用1個位元組,因此字元陣列c1,c2,c3均佔用4個位元組(包括字串結束符'\0')。pArray[0]裡存放了字元陣列c1的首地址FF10,使pArray[0]指向c1。pArray[1]裡存放了字元陣列c2的首地址FF50,使pArray[1]指向c2。pArray[2]裡存放了字元陣列c3的首地址FF70,使pArray[2]指向c3。
C語言中,允許定義並直接初始化一個未說明長度的char型指標陣列。初始化時使用大括號,括號裡的字串用逗號隔開。因此,前面的程式也可以寫成:
main()
{
int i;
char *pArray[]={ "How","are", "you"};
for(i=0;i<3;i++)
printf("%s ", pArray[i]);
}
編譯器自動查到字串的個數,定義pArray的長度為3。
程式執行到語句char *pArray[3]={ "How","are", "you"};時,系統會自動建立3個字元陣列,並分別將3個字串儲存在裡面;然後將3個字元陣列的首地址分別儲存在pArray[0],pArray[1],pArray[2]中。