首页 理论教育 C语言:使用一维数组名作为函数参数

C语言:使用一维数组名作为函数参数

时间:2023-11-23 理论教育 版权反馈
【摘要】:图6-11数组名作函数参数时的参数传递从图6-11可以看出,数组名作为函数的参数时,参数传递过程中只传递了一个值,即将数组名a的值传给了形参数组名字arr。C语言中采取了更聪明的做法——仅仅将数组的首地址(数组名)传递给形参,这样做既节省时间,又节省空间,这就是用数组名作为函数参数的实质。

C语言:使用一维数组名作为函数参数

1.一维数组作为函数形参的定义形式

其一般格式为:

在定义形参数组时,可以不指定长度

【例6-13】请输入10个同学的成绩并求出平均成绩。求平均成绩的功能由函数实现。

注意:在用数组名字作为函数的参数时,函数调用中实参应该用数组的名字。但程序中有一个问题,sort函数如何知道要处理的数据的个数?本例中题目规定是求10个同学的平均成绩,因此sort函数中循环10次累加求和,但这个方法并不通用。将例6-13修改如下:

【例6-14】请输入n(n≤10)个同学的成绩并求出平均成绩。求平均成绩的功能由函数实现。

此例中学生的个数不确定,那么sort函数中该循环多少次呢?为了确定被调函数中要处理的数据个数,一般情况下都会为函数增加第二个参数,程序修改如下:

这是用数组名作为函数参数时更一般的使用形式。(www.xing528.com)

2.数组名作函数参数的传递机制

数组名作为函数的参数,和我们前边学习的函数参数传递机制是一样的,本质上来说,C语言中的参数传递都是一个传值的过程。数组名字代表的是数组的起始地址,因此用数组名作为函数参数时传递的是一个“地址”值,而不是数组中的所有的元素值。以例6-13为例,其参数传递过程如图6-11所示。

图6-11 数组名作函数参数时的参数传递

从图6-11可以看出,数组名作为函数的参数时,参数传递过程中只传递了一个值,即将数组名a的值传给了形参数组名字arr。此时arr看起来不像数组,而是更像一个变量(实质上它就是一个变量,在指针一章中将学习相关内容),它只是接收a的值而已。这也是定义形参数组时可以不指定其长度的原因,因为形参数组没有自己的数组空间,即使指定其长度也没有意义。在arr接收a的值以后,arr和a一样,都代表同一数组的起始地址,此时相当于给同一数组起了两个名字,主调函数中用a,被调函数中用arr,如果在被调函数中改变arr数组,主调函数中的数组a也会跟着改变。

【6.15】 输入n(n≤10)个数据,并对数据从小到大排序,输出排序结果,排序功能要求用函数实现。

由例6-15可以看出,程序在sort函数中是对arr数组进行了排序,但是在main函数中输出a数组时,a数组中也完成了排序。其根本原因就在于形参数组和实参数组代表的是同一个数组,这点请谨记。

请注意用数组名作为函数参数时,绝不是将实参数组中的所有的值传递给形参数组,因为传递一批值给形参数组不仅浪费CPU的时间,而且要给形参数组开辟相应的空间以接收这批值,这样也会浪费内存空间。C语言中采取了更聪明的做法——仅仅将数组的首地址(数组名)传递给形参,这样做既节省时间,又节省空间,这就是用数组名作为函数参数的实质。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈