【时时三省】(C语言基础)数组作为函数参数
山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省
调用有参函数时,需要提供实参。例如sin ( x ),sqrt ( 2,0 ),max ( a,b )等。实参可以是常量、变量或表达式。数组元素的作用与变量相当,一般来说,凡是变量可以出现的地方,都可以用数组元素代替。因此,数组元素也可以用作函数实参,其用法与变量相同,向形参传递数组元素的值。此外,数组名也可以作实参和形参,传递的是数组第一个元素的地址。
数组元素作为函数实参
数组元素可以用作函数实参,但是不能用作形参。因为形参是在函数被调用时临时分配存储单元的,不可能为一个数组元素单独分配存储单元(数组是一个整体,在内存中占连续的一段存储单元)。在用数组元素作函数实参时,把实参的值传给形参,是“值传递”方式。数据传递的方向是从实参传到形参,单向传递。
例题:
输入10个数,要求输出其中值最大的元素和该数是第几个数。
解题思路:
可以定义一个数组a,长度为10,用来存放10个数。设计一个函数max,用来求两个数中的大者。在主函数中定义一个变量m,m的初值为a [ 0 ],每次调用max函数后的返回值存放在m中。用“打擂台”算法,依次将数组元素a [ 1 ] ~ a [ 9 ]与m比较,最后得到的m值就是10个数中的最大者。
编写程序:
运行结果:
程序分析:
从键盘输入10个数给a[0] ~ a [9]。变量m用来存放当前已比较过的各数中的最大者。开始时设m的值为a[0]。然后将m与a [ 1 ]比,如果a [ 1 ]大于m,就以a [ 1 ]的值(此时也就是max(m,a [ 1 ])的值)取代m的原值。下一次以m的新值与a [ 2 ]比较,max ( m,a [ 2 ] )的值是a [ o ],a [ 1 ],a [ 2 ]中最大者,其余类推。经过9轮循环的比较,m最后的值就是10个数的最大数。
请注意分析怎样得到最大数是10个数中第几个数。当每次出现以max ( m,a [ i ] )的值取代m的原值时,就把i的值保存在变量n中。n最后的值就是最大数的序号(注意序号从0开始),如果要输出“最大数是10个数中第几个数”,应为n+1。例如n =6时表示数组元素a6是最大数,由于序号从0开始,因此它是10数中第7个数,故应输出的是n+1。
当然,本题可以不用max函数求两个数中的大数,而在主函数中直接用if ( m > a[i] )来判断和处理。