而当用数组名作函数参数时,情况则不同。由于实际上形参和实参为同一数组,因此当形参数组发生变化时,实参数组也随之变化。本程序与例5.5程序相比,aver()函数的形参数组长度改为8,而在函数体中,for语句的循环条件也改为i<8。因此,形参数组a和实参数组sco的长度不一致。例5.7把例5.5程序中的函数的形参数组不指定长度,并改写程序。......
2023-11-18
除了变量作为函数的参数之外,数组是特殊变量的集合,也可以作为函数的参数。首先数组元素可以作为实参,其用法与变量完全相同。其次,数组名也可以作为实参和形参,函数调用时传送的是数组的地址。
1.数组名作为函数参数
【例5.6】设有一维数组score,存放10 个学生的成绩,求平均成绩。
程序运行结果如图5.5 所示。
图5.5 程序运行结果
说明:
(1)用数组名作函数参数,应该在主调函数和被调用函数分别定义数组,例中array 是形参数组名,score 是实参数组名,分别在其所在函数中定义,不能只在一方定义。
(2)实参数组与形参数组类型应一致(譬如float 型),如果不一致,将出错。
(3)在被调用函数中声明了形参数组的大小为10,但实际上不起作用,因为C 编译程序对形参数组的大小不做检查,只是将实参数组的首地址传送给形参数组。因此,score[n]和array[n]实际上指的是同一单元。
(4)形参数组也可以不指定大小,只在定义数组时在数组名后面跟一个方括号。
为了被调用函数处理数组元素的需要,可以另设一个参数,传送数组元素的个数,如例题5.7。
【例5.7】给定一组数,计算其平均值。
程序运行结果如图5.6 所示。
图5.6 程序运行结果
可以看出,两次调用average 函数时,实参数组元素个数是不同的,在第一次调用时实参5 传送给形参n;第2 次调用时,实参10 传送给形参n。(www.chuimin.cn)
【例5.8】给一组数据中第i 个位置插入数据x。
程序运行结果如图5.7 所示。
图5.7 程序运行结果
2.用多维数组名作为函数参数
也可以用多维数组名作为实参和形参,在被调用函数中对形参数组定义时可以指定每一维的大小,也可以省略第一维的大小说明。譬如int array[3][10]和int array[][10],二者合法等价。但是不能省略第二维的大小说明。因为不说明列数,系统无法确定多少行多少列。下面写法是错误的:
而形参数组第一维的大小可以是任意的,因为C 编译程序不检查第一维的大小。
【例5.9】有一个3×4 的矩阵,求所有元素中的最大值。
算法分析:先使变量max 的初值为矩阵中第一个元素的值,然后将矩阵中各个元素的值与max 相比,每次比较后都把数值大的元素存入max 中。全部元素比较完后,max 的值就是所有元素的最大值。程序如下:
程序运行结果如图5.8 所示。
图5.8 程序运行结果
用数组名作为函数参数时应注意以下几点:
(1)形参数组和实参数组的类型必须一致。
(2)形参数组和实参数组的长度可以不相同,因为在调用时只传送首地址而不检查形参数组的长度。当形参数组的长度与实参数组不一致时,虽不出现语法错误,但是执行结果将与实际不符,应予以注意。
有关C语言程序设计实用教程的文章
而当用数组名作函数参数时,情况则不同。由于实际上形参和实参为同一数组,因此当形参数组发生变化时,实参数组也随之变化。本程序与例5.5程序相比,aver()函数的形参数组长度改为8,而在函数体中,for语句的循环条件也改为i<8。因此,形参数组a和实参数组sco的长度不一致。例5.7把例5.5程序中的函数的形参数组不指定长度,并改写程序。......
2023-11-18
指针变量既可以作为函数的形参,也可以作为函数的实参。所以,为了解决通过被调用函数来实现主调函数中变量值的改变,必须使用指针变量作为函数的形参。在执行被调用函数时,使形参指针变量所指向的变量的值发生变化。函数调用完成后,通过不变的实参指针变量将变化的值保留下来。图6.8程序运行结果说明:函数swap 的形参是两个整型指针变量p1 和p2,故主函数在调用时,必须使用变量a 和b 的地址,即&a 和&b 作为实参。......
2023-10-21
从二维数组的角度看,数组名array 代表整个二维数组的首地址,也是第0 行的首地址。所以,&array[i]和array+i 等价,都是指向二维数组的第i 行。array[i]+j 指向二维数组array[i][j]。*就是数组元素 array[i][j]的值。计算 array[i][j]在数组中的相对位置为“i×m+j”,*就是数组array[i][j]的值。使用指针变量输出二维数组任一行任一列元素的值。图6.12程序运行结果说明:在主函数中定义了一个指针变量p,指向数组array 第0 行第0 列。p+是二维数组array 第i 行第j 列的地址。......
2023-10-21
在C 语言中,具有一定功能、相对独立的程序段称为函数。无论主函数main()位于程序中的什么位置,程序执行时总是从main()开始。C 语言程序的一般结构如图5.1 所示。它具有以下特点:图5.1C 程序中的函数C 语言允许一个程序由多个源文件组成,每个源文件可以独立编译,一个源文件可以被不同的程序使用。一个C 程序有且仅有一个主函数main,主函数可以放在任何一个源文件中,程序总是从主函数开始执行。......
2023-10-21
在C 语言中,对文件的基本操作包括文件的打开与关闭、文件的读和写等。表9.1文件操作方式例如:打开当前目录下的C.DAT 文件,这是一个二进制文件,只允许进行读操作,并使fp 指针指向该文件。应该养成在程序终止前关闭所有文件的习惯,如果不关闭文件将会丢失数据。......
2023-10-21
图6.3二维数组a[3][4]示意图多维数组定义的一般形式为:数据类型符数组名[常量表达式][常量表达式]…图6.4二维数组存储示意图图6.5三维数组存储示意图根据多维数组在存储器中按行存储的规则和多维数组的行列顺序可以计算出多维数组元素存储时在线性连续存储单元中的排列序号。......
2023-11-20
若在表中找不到与给定条件相符合的数据,则称为不成功的查找,给出提示信息或空位置信息。本节介绍最常用的两种查找方法:顺序查找和折半查找。③基准位置数据值与查找的关键字值不相符时,在两个子集合中选取一个,重复执行①、②,直到被处理的查找集合中没有数据为止。图6.11是在一有序序列中实现对key=21进行折半查找的过程。......
2023-11-20
指针及数组名作为函数的参数时,是以数据的地址作为实参调用该函数,即作为参数传递的不是数据本身,而是数据对应的地址,使实参和形参指向同一存储单元。所以,调用函数与被调函数存取的将是相同的一组空间,即双向的“地址”传递,也就是说函数调用后,实参指向的对象的值可能会发生变化。图6.15程序运行结果从程序运行结果可以明显地看出,只有swap3 函数能实现交换两个整数的目的。......
2023-10-21
相关推荐