目录

  • 1 计算机概述
    • 1.1 计算机简介
    • 1.2 计算机系统
    • 1.3 数值在计算机中的表示
  • 2 C语言概述
    • 2.1 C语言发展及特点
    • 2.2 C语言程序的运行步骤和开发环境
    • 2.3 简单的C语言程序
  • 3 C语言基础
    • 3.1 变量、常量及数据类型
    • 3.2 运算符和表达式
    • 3.3 输入、输出
  • 4 选择结构
    • 4.1 计算机编程和算法
    • 4.2 if语句
    • 4.3 if嵌套和if多分支
    • 4.4 switch语句
  • 5 循环结构
    • 5.1 while语句和do...while语句
    • 5.2 for语句
    • 5.3 break语句和continue语句
    • 5.4 goto语句构成的循环
    • 5.5 嵌套循环结构
    • 5.6 程序设计举例
  • 6 函数
    • 6.1 函数的定义与调用
    • 6.2 函数的嵌套调用和递归调用
    • 6.3 作用域和生命周期
    • 6.4 章节小结与测试
  • 7 数组
    • 7.1 一维数组及应用
    • 7.2 二维数组及应用
    • 7.3 字符数组
    • 7.4 数组作为函数参数
    • 7.5 章节小结与测试
  • 8 指针
    • 8.1 指针变量
    • 8.2 指针与数组
    • 8.3 指针的多种形态
  • 9 字符串
    • 9.1 字符串概念及输入输出
    • 9.2 字符串函数
    • 9.3 指针与字符串
    • 9.4 章节小结与测试
  • 10 编译预处理
    • 10.1 宏定义
    • 10.2 文件包含
    • 10.3 条件编译
  • 11 结构体、共用体和用户定义类型
    • 11.1 结构体类型变量
    • 11.2 结构体类型数组与指针
    • 11.3 结构体与函数
    • 11.4 用指针处理链表
    • 11.5 共用体
  • 12 位运算
    • 12.1 位运算的概念和运算规则
  • 13 文件
    • 13.1 C文件概述
    • 13.2 文件的打开与关闭
    • 13.3 文件读写
    • 13.4 位置指针的定位
数组作为函数参数

学习目标:

    理解数组元素作为函数参数

    掌握数组名作为函数参数

重点:

    掌握数组名作为函数参数

难点:

    理解传递过程

 

一、数组元素作函数参数

数组元素可以作为函数的实参,与用普通变量作函数的实参使用方法一样,传递方式是单向传递,子函数形参接受的是数值副本,产生变化不影响主函数中的实参数值。

例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)