在用数组名作函数参数时,不是进行值的传送,即不是把实参数组的每一个元素的值都赋予形参数组的各个元素。因为实际上形参数组并不存在,编译系统不为形参数组分配内存。因为数组名就是数组的首地址,因此在数组名作函数参数时所进行的传送只是地址的传送, 也就是说把实参数组的首地址赋予形参数组名。形参数组名取得该首地址之后,也就等于有了实在的数组。实际上是形参数组和实参数组为同一数组,共同拥有一段内存空间。
另外,也可以用一个对应类型的指针作为形参,该指针接受由实参传递过来的数组名后,该指针既指向该数组的起始地址,该指针也可以当作数组名来用。例如下面的fun1函数也可以定义为:int fun1(float *score, float *below);
#include<stdio.h>
#define N 10
int fun1(float score[] , float below[])
{
float avg;
float sum=0;
int i;
int j=0;
for( i=0; i<N; i++)
{
sum += score[i];
}
avg = sum/N;
for( i=0; i<N; i++)
{
if(score[i]<avg)
{
below[j]=score[i];
j++;
}
}
return j;
}
int main()
{
float score[N] = {35,21,56,89,66,54,78,88,41,87};
float below[N];
int count;
int i;
count = fun1(score,below); //数组名直接作为实参传递
for(i=0;i<count;i++)
{
printf("%f/n",below[i]);
}
return 0;
}