数组名做函数的参数

数组名作函数的参数,必须遵循以下原则:
(1)如果形参是数组形式,则实参必须是实际的数组名,如果实参是数组名,则形参可以是同样维数的数组名或指针。
(2)要在主调函数和被调函数中分别定义数组。
(3)实参数组和形参数组必须类型相同,形参数组可以不指明长度。
(4)在C语言中,数组名除作为变量的标识符之外,数组名还代表了该数组在内存中的起始地址,因此,当数组名作函数参数时,实参与形参之间不是"值传递",而是"地址传递",实参数组名将该数组的起始地址传递给形参数组,两个数组共享一段内存单元,编译系统不再为形参数组分配存储单元。
例9-15:分析程序的执行过程。
#include <stdio.h>
func6 ( char str[ ] )
{ printf ("%s",str);
}
main( )
{ char a[10]= "Turbo C";
func6(a); /* 数组名做函数的实参 */
}
内存空间存储状态如9-5图所示。

调用时,实参数组将首地址a 赋值给形参数组str,两个数组共同占用相同的内存单元,共享数组中的数据,a[0]与str[0]代表同一个元素,a[1]与str[1]代表同一个元素。因此,当数组名做函数参数时,形参数组的长度与实参数组的长度可以不相同,当形参数组长度小与实参数组长度时,形参数组只取部分实参数组中的数据,实参中的其余部分可以不起作用,形参数组也可以不指明长度。


多维数组做函数的参数
当多维数组中元素做函数参数时,与一维数组元素做函数实参是相同的,这里讨论多维数组名做函数的参数。以二维数组为例:
二维数组名做函数参数时,形参的语法形式是:
类型说明符 形参名[ ][常量表达式M]
形参数组可以省略一维的长度。
例如:int array[ ][10]
由于实参代表了数组名,是"地址传递",二维数组在内存中是按行优先存储,并不真正区分行与列,在形参中,就必须指明列的个数,才能保证实参数组与形参数组中的数据一一对应,因此,形参数组中第二维的长度是不能省略的。
调用函数时,与形参数组相对应的实参数组必须也是一个二维数组,而且它的第二维的长度与形参数组的第二维的长度必须相等。

原文地址:https://www.cnblogs.com/viviwind/p/2642535.html