指針數組的定義和引用


指針數組是一種特殊的數組,指針數組的數組元素都是指針變量。指針數組的定義格式爲:
類型名稱 *數組名稱[數組長度];
例如: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]中。數組

相關文章
相關標籤/搜索