一个数组的元素值为指针则是指针数组。 指针数组是一组有序的指针的集合。 指针数组的所有元素都必须是具有相同存储类型和指向相同数据类型的指针变量。
指针数组说明的一般形式为:
类型说明符 *数组名[数组长度]
其中类型说明符为指针值所指向的变量的类型。
例如:
int *pa[3]
表示pa是一个指针数组,它有三个数组元素,每个元素值都是一个指针,指向整型变量。
1、用一个指针数组来指向一个二维数组。
指针数组中的每个元素被赋予二维数组每一行的首地址,因此也可理解为指向一个一维数组。
示例代码:
main()
{
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];
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));
}
void main()
{
char *day_name(char *name[],int n);
static char *name[]={ "Illegal
day",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday"
};
char *ps;
int i;
printf("input Day No:\n");
scanf("%d",&i);
if(i<0)
exit(1);
ps=day_name(name,i);
printf("Day No:%2d-->%s\n",i,ps);
}
char *day_name(char *name[],int n)
{
char *pp1,*pp2;
pp1=*name;
pp2=*(name+n);
return((n<1||n>7)? pp1:pp2);
}
#include<stdio.h>
main()
{
void sort(char *name[],int
n);
void print(char *name[],int n);
static char *name[]={ "CHINA","AMERICA","AUSTRALIA",
"FRANCE","GERMAN"};
int n=5;
sort(name,n);
print(name,n);
}
void sort(char *name[],int
n)
{
char *pt;
int i,j,k;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(strcmp(name[k],name[j])>0)
k=j;
if(k!=i)
{
pt=name[i];
name[i]=name[k];
name[k]=pt;
}
}
}
void print(char *name[],int
n)
{
int
i;
for (i=0;i<n;i++)
printf("%s\n",name[i]);
}
void main()
{
void average(float *p,int
n);
void search(float (*p)[4],int
n);
float score[3][4]={
{65,67,70,60},
{80,87,90,81},
{90,99,100,98}
};
average(*score,12); //求12个学生平均数
search(score,2); //求序号为2的学生成绩
}
void
average(float *p,int n)
{
float *p_end;
float sum=0,aver;
p_end=p+n-1;
for( ; p<=p_end ; p++)
sum+=(*p);
aver=sum/n;
printf("average= %5.2f \n",aver);
}
void search(float (*p)[4],int n) //p是指向具有4个元素的一维数组的指针
{
int i;
printf("The score of No.%d are
:\n",n);
for(i=0;i<4;i++)
printf("%5.2f ",*(*(p+n)+i));
printf("\n");
}
附件列表