学习目标:
理解数组元素作为函数参数
掌握数组名作为函数参数
重点:
掌握数组名作为函数参数
难点:
理解传递过程
一、数组元素作函数参数
数组元素可以作为函数的实参,与用普通变量作函数的实参使用方法一样,传递方式是单向传递,子函数形参接受的是数值副本,产生变化不影响主函数中的实参数值。
例7.7 有两个数组a、b。各有10个元素,将它们对应地逐个相比(即a[0]与b[0]比,a[1]与b[1]比,……)。如果a数组中的元素大于b数组中相应元素的数目多于b数组中元素大于a数组中相应元素的数目(例如,a[i]>b[i]6次,b[i]>a[i]3次,其中i每次为不同的值,)则认为a数组大于b数组,并分别统计出两个数组相应元素大于、等于、小于的次数。
二、数组名作函数参数
在函数中处理整个数组的元素,用函数名作为函数实参,此时并不是将该数组中全部元素传递给所对应的形参。
数组名代表整个数组的首元素地址,即首地址。所有传递时是将主函数中数组的首元素的地址(实参)传递给子函数中对应的形参,因此对应的形参应当是数组名或指针变量(指针变量下面章节讲解)。
用数组名作为函数参数,在调用时并不另外开辟一个存放形参数组的空间。将实参数组的首地址传给形参数组名,形参数组名获得实参的首元素的地址,因此实参数组首元素和形参数组首元素具有同一地址,它们共占同一个存储单元。
对子函数数组的数据处理就是对主函数数组的数据处理。
例7.8 有一个一维数组score,内放10个学生成绩,求平均成绩。
说明:
(1)用数组名作函数参数,应该在主调函数(主函数)和被调用函数(子函数)中分别定义数组,例7.8中array是形参数组名,score是实参数组名,分别在其所在函数中定义,不能只在一方定义。
(2)实参数组与形参数组类型应一致,例7.8中都是int型,如不一致,传参会出错。
(3)将实参数组的首地址传给形参数组名,例7.8中形参数组首地址array[0]和score[0]具有同一地址,共占同一个存储单元,array[i]和score[i]都是共同的存储单元,array[i]和score[i]具有相同的值。
(4)形参数组array的大小可以不设置,如第2行代码可以改写成:
double fun(int array[])
C编译对形参数组大小不做检查,大小值不起作用。
讨论题:
(1)例7.7第2行代码中函数形参可以写成数组元素a[i],b[i]吗?
上机实践题:
(1)有两个班,学生数不同,编写功能函数,用来分别求各班的平均成绩。
子函数参数为两个,形参int array[]不指定数组大小,形参n为班级人数。double fun(int array[],int n)

