数组可以作为函数的参数来传递信息。如:
#include <stdio.h>
#define N 5
void sort(float a[N])
{
int i,j;
float temp;
for(i=0;i<N;i++)
{
for(j=0;j<N-i-1;j++)
{
if(a[j] > a[j+1])
{
temp = a[j+1];
a[j+1] = a[j];
a[j] = temp;
}
}
}
}
void main()
{
float grade[N];
int i;
printf("\n 输入 %d 个学员的成绩: \n",N);
for(i=0;i<N;i++)
{
scanf("%f",&grade[i]);
}
sort(grade);
printf("\n 排序后的成绩为: \n");
for (i=0;i<N;i++)
{
printf("%5.2f ",grade[i]);
}
printf("\n");
}
分析:在示例中,main()函数中声明了一个浮点型数组grade,用来保存学员的成绩。首先录入学员的成绩,存储在数组grade中。然后调用排序函数sort,将数组名grade作为函数的实参传递给sort函数的形参数组a。在sort函数中,对数组a的元素排序。调用函数后,打印数组grade的元素。由输出结果可以看出,数组grade中的元素也成为有序的了。排序函数中修改形参数组a的内容,为什么会影响到实参数组元素的值呢?实际上,在用数组用实参时,不是进行值的传递,即不是把实参数组的每一个元素的值都依次赋给形参数组各元素。那么,数据的传送是如何实现的呢?数组名就是数组的首地址。因此在数组名取得该首地址之后,也就等于有了实在的数组。实际上形参数组和实参数组为同一数组,共同拥有一段内存空间所以示例中在被调用函数中,改变数组a的元素值,数组grade的元素值也随之改变。
另外形参数组和实参数组的长度可以不相同,因为在调用时,只传送首地址而不检查形参数组的长度。当形参数组的长度与实参数组不一致时,虽然不出现语法错误(编译能通过),但是程序执行结果将与实际不符。