数组作为函数参数在函数之间传递数据有两种情况:
一是数组元素作为函数参数,这种情况下与简单变量作为函数的参数完全一样,数组元素的值被单向传递给形参变量。
另一种情况是数组名作为函数的参数,此时作为实参的数组名将其存储的数组的首地址单向传递给作为形参的数组名。
例:编写程序,定义一个能够计算数组平均值的函数average。在main函数中输入一个班所有学生的考试成绩,调用average函数计算平均成绩并输出。
参考答案:
#include <stdio.h>
double average(double array[], int n); //函数声明
int main()
{
double scores[]; //假设一个班最多40人
double aver;
int num, i;
printf("输入班级人数: ");
scanf("%d", &num);
printf("输入%d个学生成绩: \n", num);
for(i=; i<num; i++)
{
scanf("%lf", &scores[i]);
}
aver = average(scores, num);
printf("班级平均分: %.2f\n", aver);
return ;
}
double average(double array[], int n)
{
double sum = ;
int i;
for(i=; i<n; i++)
{
sum = sum + array[i];
}
return sum/n;
}
结果示例:
多维数组名作为函数的参数
多维数组名作为函数的参数的一般形式如下
类型说明符 函数名(类型说明符 形参数组名[数组长度][数组长度])
{
... ...
}
形参的二维数组在定义时可以不指定数组第1维的长度,第2维的长度必须确定
例:编写函数max求整型二维数组中元素的最大值。
参考代码:
#include <stdio.h>
int max(int array[][], int row); //函数声明
void display(int array[][], int row); //函数声明
int main()
{
int a[][] = {{1, 3, 5, 7}, {4, 66, 33, 18}, {6, 8, 9, 3}};
int b[][] = {{11, 23, 55, 22}, {6, 8, 9, 3}};
printf("数组a: \n");
display(a, ); //调用display输出数组a
printf("数组a的最大值: %d\n", max(a, )); //求a的最大值并输出
printf("数组b: \n");
display(b, ); //调用display输出数组a
printf("数组b的最大值: %d\n", max(b, )); //求b的最大值并输出
return ;
}
/*max求4列的二维数组array中元素最大值, row为行数*/
int max(int array[][], int row)
{
int i, j, m;
m = array[][];
for(i=; i<row; i++)
{
for(j=; j<; j++)
{
if(array[i][j] > m) m=array[i][j];
}
}
return m;
}
/*display输出4列的二维数组, row为行数*/
void display(int array[][], int row)
{
int i, j;
for(i=; i<row; i++)
{
for(j=; j<; j++)
{
printf("%4d", array[i][j]);
}
printf("\n");
}
}
结果示例: