在指针数组的定义形式中,由于“[ ]”比“*”的优先级高,使数组名先与“[]”结合,形成数组的定义,然后再与数组名之前的“*”结合,表示此数组的元素是指针类型的。注意,在“*”与数组名之外不能加上圆括号,否则变成指向数组的指针变量。
引人指针数组的主要目的是便于统一管理同类的指针。如利用指针数组能实现对一组独立的变量以数组的形式对它们作统一处理。如有以下定义:
in a,b,c,d,e,f;
int *apt[]={&a,&b,&c,&d,&e,&f};
下面的循环语句能顺序访问独立的变量a、b 、c、d、e、f;
for( k=0; k<6;k++)
printf("%d\t",*apt[k]);/*其中*apt[k]可写成**(apt+k)*/
当指针数组的元素分别指向二维数组各行首元素时,也可用指针数组引用二维数组的元素。以下代码说明指针数组引用二维数组元素的方法。设有以下代码:
int a[10][20] ,i;
int *b[10];
for(1=0;i<10;i++)/*b[i]指向数组元素a[i][0]*/
b[i]=&a[i][0] ;
则表达式a[i][j]与表达式b[i][j]引用同一个元素,即从指针数组方向来看,因b[i]指向元素a[i][0],*(b[i]+j)或 b[i][j]引用元素a[i][j]。
另外,当指针数组的元素指向不同的一维数组的元素时,也可通过指针数组,如同二维数组那样引用各一维数组的元素。如以下代码所示:
char w0[ ]="Sunday",w1[ ]="Monday",w2[ ]="Tuesday",
w3[ ]="Wednesday", w4[ ]="Thursday", w5[ ]="Friday",
w6[ ]="saturday";
char *wName[ ]={w0,wl,w2,w3,w4,w5,w6 };
则语句for(i=0;i<=6;i++)
printf("%s\n", wName[i]);
输出星期的英文名称。代码wName[2][4]引用字符w2[4],其值为'd'。
以下例子把一维数组分割成不等长的段,通过指针数组,把一维数组当作二维数组来处理。
# include<stdio.h>
# define N 8
int p[N*(N+l)/2],i,j,*pt[N] ;
void main()
{ for(pt[0]=p, i=l;i<N; i++)
pt[i]=pt[i-1]+i;
for(i=0; i<N;i++) {
pt[i][0]=pt[i][i]=l;
for(j=l;j<i; j++)
pt[i][j]=pt[i-1][j-1]+pt[i-1][j];
}
for(i=0;i< N; i++) {
printf("%*c",40-2*i,'');
for(j=0; j<=i ;j++)
printf("%4d", pt[i][j]) ;
printf("\n");
}
}
程序产生如下形式的二项式系数三角形:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 1O 5 1
1 6 15 20 15 6 1
本新闻共
6页,当前在第
5页
1 2 3 4 5 6