欢迎访问文稿网!

数组作为函数的参数

范文之家 分享 时间: 加入收藏 我要投稿 点赞

数组作为函数的参数

    6.4 数组作为函数的参数

    数组作为函数的参数主要有两种情况:

    第一种情况,数组元素作为函数的实参。这种情况与普通变量作实参一样,是将数组元素的值传给形参,这种参数传递方式为“值传递”。

    第二种情况,数组名作为函数的实参。要求函数形参是与实参相同类型的数组名(或指向数组的指针变量,详见第7章),将实参数组的起始地址(数组名代表数组的起始地址)传给形参数组,这种参数传递方式为“地址传递”。

    “值传递”与“地址传递”的形实参数结合的区别可以用图6-10表示。

    img408

    

    图6-10 两种传递方式的示意图

    从图6-10中我们可以看出,图(a)中形参y获得实参x[0]的数据值55后,形参与实参再没有任何关联,因此,形参的值如果发生改变,不会影响到实参的值。

    图(b)中形参y获得的只是实参x(为数组名)的起始地址指针,y指向x所在的存储单元,对y进行操作实际上就是到数组x所在的存储空间去进行操作,因此,形参数组的值如果发生改变,就会影响到实参数组值的改变。

    如果在调用的函数中对形参执行加9操作,其结果如图6-11所示。

    img409

    

    图6-11 调用函数中执行加9后的示意图

    显然,两种传送方式对实参的影响结果不一样。

    1.数组元素作函数的实参

    数组元素作为函数实参与简单变量作为函数实参相同,是将元素的值传给被调函数的形参,是单向值传递。

    例6.15 从键盘上输入一行英文,统计出该行英文中小写元音字母a、e、i、o、u的个数。设计一个函数aeiou(),判断该行英文中各字母是否为小写元音字母。

    程序如下:

    img410

    程序运行结果如下:

    img411

    程序中实参str [i]与形参c1之间是值传递。

    2.数组名作函数参数

    数组名作函数参数是把实参数组的起始地址传给了形参数组,即形参数组与实参数组对应同一段内存单元,利用这个特点,可得到多个返回值。

    例6.16 从一个3行4列的矩阵中找出最大值与最小值,并把它们分别放在第一、第二个元素中。

    img412

    img413

    程序运行结果如下:

    img414

    说明:

    ①数组名作函数参数时,形参与实参都应使用数组名,且分别在被调用函数与主调函数中说明。

    ②实参与形参类型要一致。

    ③实参数组与形参数组大小可以不一致,形参数组可不指定大小。C编译程序不检查形参数组的大小。

    ④对一维形参数组名,在定义时,数组名后面可只跟一对空方括号。

    例如:

    img415

    对多维数组而言,形参的第一维可不指定,但其他维必须指定。如上例中定义形参时可以改成:void maxmin(int b[][4])。

    通常为了在被调用函数中更加方便地处理数组元素,可另设一参数来传递数组元素个数。

    例如:

    img416

    例6.17 改写例6.6“用选择排序法,从键盘上任意输入10个整数从大到小地进行排序,并在屏幕上显示出来”,将其中的排序部分改为一个函数void sort(int b[],int k),输入的整数个数由10个改成为任意个(100以内)且由参数k传递,在主函数中完成输入和输出。

    程序如下:

    img417

    img418

    程序运行结果如下:

    img419

    例6.18 利用插入排序法对字符串中的字符按从小到大的顺序进行排序。

    插入排序法的基本算法是:先对字符串中的头两个元素进行排序;然后把第三个字符插入到前两个字符中,插入后前三个字符依然有序;再把第四个字符插入到前三个字符中……

    如果待插入的字符比前已排好序字符串的最后一个字符小,则要通过逐一比较找到该字符的插入点,大的字符要往后挪动;如果待插入的字符比前面已排好序字符串的最后一个字符大,则不需要挪动。

    例如有一排好序的字符串ABGH,如待插入字符为D,将D逐一与H、G比较,H、G往后挪动。如待插入字符为'K',则不需要挪动。

    假定待排序的字符串已在主函数中赋予,函数fun完成插入排序,程序如下:

    img420

    程序运行结果如下:

    img421

221381
领取福利

微信扫码领取福利

微信扫码分享