本程序是通過指針函數(shù),輸入一個(gè)1~7之間的整數(shù), 輸出對(duì)應(yīng)的星期名。指針數(shù)組的說明與使用一個(gè)數(shù)組的元素值為指針則是指針數(shù)組。 指針數(shù)組是一組有序的指針的集合。 指針數(shù)組的所有元素都必須是具有相同存儲(chǔ)類型和指向相同數(shù)據(jù)類型的指針變量。
指針數(shù)組說明的一般形式為: 類型說明符*數(shù)組名[數(shù)組長度]
其中類型說明符為指針值所指向的變量的類型。例如: int *pa[3] 表示pa是一個(gè)指針數(shù)組,它有三個(gè)數(shù)組元素, 每個(gè)元素值都是一個(gè)指針,指向整型變量。通?捎靡粋(gè)指針數(shù)組來指向一個(gè)二維數(shù)組。 指針數(shù)組中的每個(gè)元素被賦予二維數(shù)組每一行的首地址, 因此也可理解為指向一個(gè)一維數(shù)組。圖6—6表示了這種關(guān)系。
int a[3][3]={1,2,3,4,5,6,7,8,9};
int *pa[3]={a[0],a[1],a[2]};
int *p=a[0];
main(){
int i;
for(i=0;i<3;i++)
printf("%d,%d,%d\n",a[i][2-i],*a[i],*(*(a+i)+i));
for(i=0;i<3;i++)
printf("%d,%d,%d\n",*pa[i],p[i],*(p+i));
}
本例程序中,pa是一個(gè)指針數(shù)組,三個(gè)元素分別指向二維數(shù)組a的各行。然后用循環(huán)語句輸出指定的數(shù)組元素。其中*a[i]表示i行0列元素值;*(*(a+i)+i)表示i行i列的元素值;*pa[i]表示i行0列元素值;由于p與a[0]相同,故p[i]表示0行i列的值;*(p+i)表示0行i列的值。讀者可仔細(xì)領(lǐng)會(huì)元素值的各種不同的表示方法。 應(yīng)該注意指針數(shù)組和二維數(shù)組指針變量的區(qū)別。 這兩者雖然都可用來表示二維數(shù)組,但是其表示方法和意義是不同的。
二維數(shù)組指針變量是單個(gè)的變量,其一般形式中"(*指針變量名)"兩邊的括號(hào)不可少。而指針數(shù)組類型表示的是多個(gè)指針( 一組有序指針)在一般形式中"*指針數(shù)組名"兩邊不能有括號(hào)。例如: int (*p)[3];表示一個(gè)指向二維數(shù)組的指針變量。該二維數(shù)組的列數(shù)為3或分解為一維數(shù)組的長度為3。 int *p[3] 表示p是一個(gè)指針數(shù)組,有三個(gè)下標(biāo)變量p[0],p[1],p[2]均為指針變量。
指針數(shù)組也常用來表示一組字符串, 這時(shí)指針數(shù)組的每個(gè)元素被賦予一個(gè)字符串的首地址。 指向字符串的指針數(shù)組的初始化更為簡單。例如在例6.20中即采用指針數(shù)組來表示一組字符串。 其初始化賦值為:
char *name[]={"Illagal day",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday"};
完成這個(gè)初始化賦值之后,name[0]即指向字符串"Illegal day",name[1]指?quot;Monday"......。
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |