可以定义一个能接受数组作为函数参数的函数,然后调用这个函数时,可以将一个实际的数组传递给它。

数组作为函数参数时,其定义方式有下列三种:

/*函数名param后跟一个空的[],说明param可以接受一个数组*/
void myFunction(int param[]) {
   /*函数体 代码*/ 
}
/*函数名param后跟一个非空的[size],说明param可以接受一个大小为size的数组*/
void myFunction(int param[]) {
   /*函数体 代码*/ 
}
/*函数名param前有一个*,说明param可以接受一个数组*/
void myFunction(int *param) {
   /*函数体 代码*/ 
}

上述3个函数中,实际上上面2个函数都会被编译器转化为第3个函数,也就是说“数组作为函数的形参”实际上是一个指针类型的形参,即将来可以接受一个数组名表示的数组的起始地址!而并不是将一个数组的所有元素传给一个函数,仅仅传递的是一个小小的指针变量。

比如,我们可定义下面的函数,第一个参数表示可以接受一个传入的数组

double getAverage(int arr[], int size) {

   int i;
   double avg;
   double sum = 0;

   for (i = 0; i < size; ++i) {
      sum += arr[i];
   }

   avg = sum / size;

   return avg;
}

然后我们可以调用这个数组:

#include <stdio.h>  
/* 函数声明,表示存在这种格式的函数getAverage, 其第一个参数可以是一个int型数组,第二个参数是这个数组的大小 */
double getAverage(int arr[], int size);

int main () {

   /* 5个元素的int整型数组 */
   int balance[5] = {1000, 2, 3, 17, 50};
   double avg;

   /* 将数组名(实际是数组对应内存块的起始地址)传给getAverage函数 */
   avg = getAverage( balance, 5 ) ;
 
   /* 输出getAverage的返回值 */
   printf( "Average value is: %f ", avg );
    
   return 0;
}

也可以传递多维数组(如二维数组)给函数,在定义接受这种多维数组的函数参数时,和接受一维数组的函数参数一样,其第一维的大小也可以不指定。同样,如果我们省略第一维对应的方括号[],则要在参数名前加一个‘’。 并用圆括号括起来 “(参数名)”。

#include <stdio.h> 
#include <stdlib.h>  
const int ROW = 2;
const int COLUMN = 3;

/*这2个函数的定义在main函数的调用语句后面,所以要先声明(说明)函数的规范*/
void fill_array(int (*pm)[COLUMN],int row);
void display(int m[][COLUMN],int row);
 
int main()
{
    int i,j;
    int m[ROW][COLUMN];
 
    /* 修改数组元素的值 */
    fill_array(m,ROW);
 
    /* 显示数组的元素 */
    display(m,ROW);
 
    return 0;
}
 
void fill_array(int (*pm)[COLUMN],int row)
{
 
    int i,j;
    printf("Please fill the array's content:\n");
    /* 修改数组元素的值 */
    for(i = 0; i < row; i++)
    {
        for(j = 0; j < COLUMN; j++)
        {
            printf("\nm[%d][%d]:",i,j);
            scanf("%d",&pm[i][j]);
        }
    }
 
}
 
void display(int m[][COLUMN],int row)
{
    int i,j;
    /* 显示数组的元素 */
    printf("Array's content:\n");
 
    for(i = 0; i < row; i++)
    {
        for(j = 0; j < COLUMN; j++)
        {
            printf("%d\t",m[i][j]);
        }
        printf("\n");
    }
 
}

执行程序后的输出:

Please fill the array's content:
 
m[0][0]:1
 
m[0][1]:2
 
m[0][2]:3
 
m[1][0]:4
 
m[1][1]:5
 
m[1][2]:6
Array's content:
1       2       3
4       5       6