第七章 函数(四)

2024-01-09 18:08:15

四、数组作为函数参数?

1、数组元素作为函数实参

回顾一下数组元素这个概念,例如定义一个包含 10个元素的数组“int a[10];”, 这相当于定义了 10 个变量,分别为 a[0]-a[9] ,所以在这里,数组元素就可以当作普通变量来使用,既然当作普通变量来使用,将它们作为实参来调用函数当然也是没有问题的。

例:

2、数组名作为函数实参

在讲解函数调用形式时曾说过,实参和形参个数要相等,类型要一致,按顺序对应,一一传递,C语言规定,实参变量对形参变量的数据传递是“值传递”,也就是单向传递,只由实参传递给形参,不能由形传递给实参。

前面已经看过了用变量作为函数的实参(这是将变盘进行值传递),此外,数组名也可以作为函数实参,数组名代表的是数组的首地址,所以,将数组名作为函数的实参进行传递时,传递的其实是数组的首地址,此时函数中的形参也应该用数组名(或数组指针,指针后面会讲解)。

值得强调的是:将数组名作为函数参数时,就不是”值传递"的概念了,不再是单向传递,而是把实参数组的开始地址(背地址)传递给了形参,这就相当于实参和形参指向(代表)了同一段内存单元,这其实叫地址传递,也就是说形参数组中各个元素的值,如果发生了改变,就等价于实参数组元素的值发生了相应的改变,这一点是与普通变量作为函数参数明显不同的地方。

例:有5个学生,考试成绩保存在一个数组中,词用一个函数,用来修改其中个学生的考试成绩。

有几点说明:

(1)如果实参为数组名,则形参也应该为数组名,也就是说,形参也应该被定义为数组。

(2)实参数组与形参数组类型必须一致,例如都为int型,否则,结果会出错或者出现想不到的事情。

(3)形参数组大小可以不指定,即使指定了也可以与实参数组大小不一致,因为C编译器对形参数组大小不做检查,只是将实参数组的首地址传递给形参数组,甚至可以定义形参数组大小比实参数组大,但超过实参数组大小的部分内存不要去引用,否则会导致程序立即或者不定时崩溃。例如如果像下面这样定义score函数:void score(int arr[9]){},形参中指定了数组大小并且比实参中的数组大小要大。千万不要去引用arr[5]-arr[8],甚至更大下标的元素。

3、用多维数组作为函数实参

可以用多维数组名作为形参和实参,形参数组在定义时,可以指定每一维的大小,也可以省略第一维的大小,但不能省略第二维的大小。记住一点,实参是多少行多少列,形参就尽量跟实参一样(也是这些行这些列),这样实参能引用的下标形参一样能引用,就会保证写的代码不出错误。其实只要明白数组名作为参数传递时,传递的方式是"传递地址"这样一个概念,就很简单。

例:

文章来源:https://blog.csdn.net/weixin_30479905/article/details/135483546
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。