22-数组与函数

 

数组可以作为函数的参数使用,进行数据传送。
数组用作函数参数有两种形式:一种是把数组元素(下标变量)作为实参使用;另一种是把数组名作为函数的形参和实参使用。
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个数:\n");
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])

posted @ 2014-10-02 07:49  微雨独行  阅读(251)  评论(0编辑  收藏  举报
1 2