二维数组作为函数参数的使用:
下面是c primer plus10.13的第12题
代码:
#include <stdio.h>
#include <stdlib.h>
int getinput(int shuzu[][5]);
int ave(int *shuzu);
double allave(int shuzu[][5]);
int max(int shuzu[][5]);
int *p;
int main()
{
int a[3][5];
int i,j;
p=a[0];
getinput(p);
for(i=0;i<3;i++)
{
for(j=0;j<5;j++)
{
printf("%10d",a[i][j]);
}printf("\n");
}
for(i=0;i<3;i++)
{ int av=ave(a[i]);
printf("average of row %d is %10d \n",i,av);
}
double av15=allave(a);
printf("average of all 15 num is %f\n",av15);
printf("max is %d\n",max(a));
return 0;
}
int getinput(int shuzu[][5])
{
int i,j;
printf("input 15 numbers\n");
for(i=0;i<3;i++)
for(j=0;j<5;j++)
scanf("%d",&shuzu[i][j]);
}
int ave(int *shuzu)
{
int i;
int sum=0;
for(i=0;i<5;i++)
sum+=shuzu[i];
return sum/5;
}
double allave(int shuzu[][5])
{
int i,j;
int sum=0;
for(i=0;i<3;i++)
for(j=0;j<5;j++)
sum+=shuzu[i][j];
return sum/15;
}
int max(int shuzu[][5])
{
int i,j;
int max=shuzu[0][0];
for(i=0;i<3;i++)
for(j=0;j<5;j++)
max=(max>shuzu[i][j])?max:shuzu[i][j];
return max;
}
二维数组作为函数参数时,有几种方法:
1是数组形式传递,如代码中:int max(int shuzu[][5]),在子函数中,可以作为数组直接使用;
2是指针形式传递,如代码中:int ave(int *shuzu),这是一个一维指针,在子函数中,可以作为一维数组直接使用。
二维数组传递时,要么像1中那样在函数中写明,要么像int getinput(int (*shuzu)[5])这样定义为指向5个int大小的指针。
可以看到,在子函数中,都是可以作为数组形式直接使用的。