对于用指向多维数组的指针做函数参数一些认识
首先,我们知道,一维数组可以作为函数参数,同时,多维数组也可以作为函数参数,用来接收实参组名传来的地址。可以有两种方法:用指向变量的指针变量和用指向一维数组的指针变量做函数参数,下面对于这两种方法做基本的阐述。
一、定义描述
(一)、用指向变量的指针变量做函数参数 首先,我们定义一个二维数组source[3][4],定义一个返回值为指针数据类型的函数:*search(int p)。当我们用指向变量的指针变量做函数参数时,我们传递的是数组首行、首列元素的首地址。因此,在函数内进行操作时,我们可以通过(p+i)来操作第i个数组元素,来返回他的地址。
(二)、用指向一维数组的指针变量做函数参数 同样,定义一个二维数组source[3][4],,定义一个返回值为指针数据类型的函数:*search(int (p)[4])。此时,我们在操作这个函数时,传递给函数的是首行的地址,因此,在函数体内部,(p+i)才指的是第i行首元素的地址。
二、应用举例:寻找第k名同学的成绩
(一)、用指向变量的指针变量做函数参数
int main()
{ int *search(int *p,int n);
int source[3][4]={{99,99,99,99},{99,99,99,99},{88,88,88,88}};
int k,i;
int *p;
scanf("%d",&k);
p=search(source,k);
for(i=0;i<4;i++)
{
printf("%d ",(p+i));
}
}int *search(int *p,int n)
{
int *flag;
flag=p+(n-1)*4;
return flag;
}
(二)、用指向一维数组的指针变量做函数参数
int main()
{
int *search(int (*p)[4],int x);
int source[3][4]={{99,99,99,99},{99,99,99,99},{88,88,88,88}};
int k,i;
int p;
scanf("%d",&k);
p=search(source,k);
for(i=0;i<4;i++)
{
printf("%d ",(p+i));
}
}
int *search(int (*p)[4],int x)
{
int flag;
flag=(p+x-1);
return flag;
}