c语言中数组作为函数参数(c语言数组函数的使用方法)
导语:C语言快速入门——数组作为函数参数
继续回到求数组平均值的问题上,对于这个命题我知道你已经厌烦了,其实我也是。不过,学习还是要继续,就像孙悟空当年上山学艺,前几年就是打杂学礼习字,所以还是继续吧。这次我们的目标是尝试将求值过程封装成一个函数。根据已经掌握的知识,下面是可能的一个版本。
程序中第一个变化是main函数的返回类型由int变更为void,这表示我们不关心main函数执行完成后的最终状态,同时也不需要每次写return 0;语句了,对于小的测试程序,能增加一些便利。
程序自身已经是自解释的了,需要注意的就是定义函数时,数组参数的写法。你欢快的运行一下程序,发现大功告成。可是仔细想想,函数的一个特性就是复用性。此时的函数只能求6个数据的平均值,如果要求8个呢?显然每次改动函数实现是不可行的,你想到了sizeof,看我多聪明,这是第二版!
这次传递的数组参数同样是scores[6],但实际的count数却是在函数体内通过sizeof计算的!不过等等,这运行结果好像不对呀!现在发挥一下我们学过的调试技巧,1:找出问题所在。2:将函数参数scores[6]改为scores[8],再次调试。
脱坑经过调试之后,你会发现在函数体中使用sizeof计算的count并不正确,它始终是1。即使将参数个数更改,它仍旧雷打不动的是1。这就说明要么我们之前掌握的sizeof知识是错的,要么就是数组传递给函数时发生了变化,相信你会选择后者。好了,这里开始是理论时刻。
一个函数可以接受数组作为其参数,但却不能返回一个数组。
当把数组传递给函数时,在函数体内,我们并不能使用sizeof计算出元素的个数。因为这时数组已经被转换为了对应的指针类型,数组的大小信息也已经被丢弃,因此数组的元素个数通常需要作为额外的参数进行传递。基于上述理论,我们来看看改版后的程序。
我们传递了两个不同大小的数组给函数,希望你能从这点上理解,当把数组传递给函数时,数组的大小信息已经被丢弃,因此函数定义时数组参数写为int scores[],而不带具体的数值。更重要的,现在我们用一个函数封装了求平均值的实现,从整个程序可以看出,函数由于复用性的特性,提高了程序的简洁性,同时使整个程序更加模块化。
本文内容由小悦整理编辑!