二级C语言考试辅导教程第五章:函数[4]

二级C语言考试辅导教程第五章:函数[4],第1张

二级C语言考试辅导教程第五章:函数[4],第2张

2.使用数组名作为函数参数
使用数组名作为函数参数和使用数组元素作为参数有几个区别:
1 .当使用数组元素作为实参时,只要数组类型与函数形参变量的类型一致,那么作为下标变量的数组元素的类型也与函数形参变量的类型一致。因此,不要求函数的参数也是下标变量。换句话说,数组元素被视为普通变量。使用数组名作为函数参数时,要求形参和对应实参都必须是同一类型的数组,并且都必须有明确的数组描述。当形参和实参不一致时,就会出错。

2.当使用普通变量或下标变量作为函数参数时,形参变量和实参变量是编译系统分配的两个不同的内存单元。调用函数时,值的传递是将实参变量的值赋给形参变量。当数组名用作函数参数时,值不会被传输,也就是说,实参数组的每个元素的值不会被赋予参数组的每个元素。因为形状参数组实际上并不存在,所以编译系统不会为形状参数组分配内存。那么,数据传输是如何实现的呢?在第四章中,我们介绍了数组名是数组的第一个地址。所以,当数组名作为函数参数时,传递的只是地址的传递,也就是说,实参数组的第一个地址被赋予了参数组的名称。参数组名获得第一个地址后,相当于拥有了一个实数组。其实参数组和实参数组是同一个数组,共享一个内存空。图5.1说明了这种情况。图中设A为自变量数组,类型为整数。a占用一个内存区域,以2000作为第一个地址。b形参数组的名称。当发生函数调用时,进行地址传输,实参数组A的第一个地址被传输到形状参数组名B,所以B也获得地址2000。这样,两个数组A和B共享一个以地址2000为头的连续内存单元。从图中还可以看出,相同下标A和B的元素实际上占用了相同的两个内部
内存单元(整数数组的每个元素占用两个字节)。例如,a[0]和b[0]都占用2000和2001个单位。当然,a[0]等于b[0]。那么以此类推,a[i]等于b[i]。
[例5.5]一个学生五门课的成绩存放在数组A中,计算平均分。
float aver(float a[5])
{
int I;
float av,s = a[0];
for(I = 1;I s = s+a[I];
av = s/5;
return av;
}
void main()
{
float SCO[5],av;
int I;
printf(" \ n输入5个分数:\ n ");
for(I = 0;i scanf("%f ",& SCO[I]);
av = aver(SCO);
printf("平均分%5.2f ",av);
}
float aver(float a[5])
{……
}
void main()
{
……
for(I = 0;i scanf("%f ",& SCO[I]);
av = aver(SCO);
...
}来源:www.examda.com
这个程序首先定义了一个实函数aver,实数组A作为它的参数,长度为5。在aver函数中,每个元素的值相加得到平均值,该平均值返回给主函数。在main函数中,首先完成数组sco的输入,然后以sco为自变量调用aver函数,将函数返回值发送给av,最后输出av值。从运行情况可以看出,程序实现了所需的功能

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 二级C语言考试辅导教程第五章:函数[4]

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情