数组可以作为函数的参数使用,进行数据传送。
数组用作函数参数有两种形式:一种是把数组元素(下标变量)作为实参使用;另一种是把数组名作为函数的形参和实参使用。
1、数组元素作为函数实参
数组元素就是下标变量,它与普通变量并无区别。因此它作为函数实参使用与普通变量是完全相同的,在发生函数调用时,把作为实参的数组元素的值传给形参,实现单向的值传递。
思考&实现1:
判别一个整数数组中各元素的值,若大于0 则输出该值,若小于 等于0则输出0值(判断过程使用函数实现)
1 #include <stdio.h>
2 void test(int a)
3 {
4 if(a > 0)
5 {
6 printf("%d ", a);
7 }
8 else
9 {
10 printf("%d ", 0);
11 }
12 }
13 int main(int argc, const char * argv[])
14 {
15 int a[5];
16 printf("请输入5个数:
");
17 for(int i = 0; i < 5; i++)
18 {
19 //接收用户输入的数并存放在数组a[5]中
20 scanf("%d", &a[i]);
21
22 }
23 for(int i = 0; i < 5; i++)
24 {
25 test(a[i]);
26 }
27 return 0;
28 }
2、数组名作为函数参数
用数组名作函数参数与用数组元素作实参有几点不同
(1) 用数组元素作函数参数不要求形参也必须是数组元素,但是用数组名作函数参数时,则要求形参和相对应的实参都必须是类型相同的数组。
(2)数组名作为函数的参数,实际上是把数组的地址赋值给形参变量,实际上是形参数组和实参数组为同一数组,共同拥有一段内存空间。
(3)在变量作函数参数时,所进行的值传送是单向的。即只能从实参传向形参,不能从形参传回实参。形参的初值和实参相同,而形参的值发生改变后,实参并不变化, 两者的终值是不同的。
3、用数组名作为函数参数时还应注意以下几点
(1)形参数组和实参数组的类型必须一致,否则将引起错误。
(2)形参数组和实参数组的长度可以不相同,因为在调用时,只传送首地址而不检查形参数组的长度。当形参数组的长度与实参数组不一致时,虽不至于出现语法错误(编译能通过),但程序执行结果将与实际不符,这是应予以注意的。
(3)在函数形参表中,允许不给出形参数组的长度,或用一个变量来表示数组元素的个数。例
如,可以写为:
void nzp(int a[]) 或写为
void nzp( int a[], int n )
其中形参数组a没有给出长度,而由n值动态地表示数组的长度。n的值由主调函数的实参进行传送。
(4) 多维数组也可以作为函数的参数。在函数定义时对形参数组可以指定每一维的长度,也可省去第一维的长度。因此,以下写法都是合法的:
int MA(int a[3][10]) 或 int MA(int a[][10])