我们已经知道可以用任何类型的变量来作为函数的参数,数组同样也可以作为函数参数。用数组作函数参数有两种形式,一种是把数组元素作为实参使用;另一种是把数组名作为函数的形参或实参使用。
1.数组元素作函数实参
这种形式与普通变量一样,因此它作为函数实参时的使用方法与普通变量是相同的,在调用函数时,把作为实参的数组元素的值传送给形参,实现单向的值传送。
在该例中首先定义一个整型函数isalp(),并声明其形参c为字符型变量,在其函数体中根据if语句判断输出相应的结果。在main函数中用一个gets语句输入字符给str,然后通过循环语句调用isalp函数,将其返回值用来统计字符串中字母的个数。
说明:
1)用数组元素作实参时,只要求数组类型和函数的形参类型一致即可,并不要求函数的形参也是下标变量。换句话说,对数组元素的处理是按普通变量对待的。
2)在普通变量或下标变量作函数参数时,形参变量和实参变量是由编译系统分配的两个不同的内存单元。在函数调用时发生的值传送,是把实参变量的值赋予形参变量。
2.数组名作为函数参数(www.xing528.com)
用数组名与用数组元素作函数实参有以下不同:
1)用数组元素作函数参数时的处理是按普通变量对待的,但用数组名作函数参数时,则要求形参和相对应的实参都必须是类型相同的数组,都必须有明确的数组声明。当形参和实参两者不一致时,即会发生错误。
2)在普通变量或数组元素作为函数参数时,变量是由编译器分配的两个不同的内存单元。在函数调用时,实参变量的值将赋予形参变量。在用数组名作为函数参数时,不是进行值的传送,并不是把实参数组的每一个元素的值都赋予形参数组的各个元素。因为实际上形参数组并不存在,编译器不会为形参数组分配内存。看到这里,或许你会问,那么数据到底是如何传送的呢?我们曾介绍过,数组名就是数组的首地址。数组名作函数参数时,其实是将地址进行了传送,也就是说把实参数组的首地址赋予形参数组名。因此,形参数组和实参数组其实就是同一个数组,它们共同占用一段内存空间。
图7-3 数组元素分布
从图7-3中,可以直观地看出它们之间的关系。设a为整型数组,数组a的起始地址为2000,由此开始连续若干内存空间被a所占用。b为形参数组。当函数被调用时,进行地址传递,把实参数组a的首地址传送给形参数组名b,于是b的首地址便为2000。于是a、b两数组共占2000为首地址的一段连续内存单元。从图中还可以看出a和b下标相同的元素实际上也占相同的两个内存单元(整型数组每个元素占2个字节)。例如,a[1]和b[1]都占用2002和2003单元,当然a[1]等于b[1]。类推则有a[i]等于b[i]。
【例7.12】 有1个一维数组score,内放10个学生成绩,求平均成绩。
3)变量作函数参数时,传送的值是单向的,即只能从实参传向形参,而不能从形参传回实参。形参的初值和实参相同,如果程序中形参的值发生了改变,但实参值仍保持不变。而当用数组名作函数参数时就不一样了。由于形参和实参共享一组内存空间,因此当形参数组发生变化时,实参数组也随之变化。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。