1、数组元素作为函数实参
int a[10]; //相当于定义了10个变量,a[0]~a[9],那么数组元素就是:a[0]~a[9],数组元素就可以当成变量使用。
#include
int whichmax(int x,int y);
int tmpmax=whichmax(a[1],a[4]);
printf("tmpmax=%d\n",tmpmax);
int whichmax(int x,int y)
2、数组名作为函数实参
实参和形参个数要相等,类型要一致,按顺序对应,一一传递。
C语言规定,实参变量对形参变量的数据传递是“值传递”,就是单向传递,只能由实参传递给形参,不能由形参传递给实参。
此外,数组名也可以作为函数实参,数组名代表的是数组首地址,当将数组名作为函数的实参时,传递的是数组的首地址。
此时,函数中的形参也应该用数组名字(也可以是数组指针)。
强调:数组名作为函数参数时,
不是"值传递(值传递:形参是会分配内存的)"的概念,
不是单向传递,而是把
实参数组的
开始地址
传递给了
形参数组(不分配内存,直接使用实参的内存地址)。
这样两个数组就会
共同占用一段内存,其实叫
地址传递,也就是说,形参数组中各个元素的值如果发生了变化,会导致实参数组元素的值也发生相应改变,这就是与变量做函数参数明显不同的。
void changevalue(int ba[5])
printf("a[%d]=%d\n",i,a[i]);
把实参数组的开始地址传递给了形参数组(不分配内存,直接使用实参的内存地址)
这样两个数组就会共同占用一段内存,其实叫地址传递
说明:
1、如果实参为数组名,则形参也为数组名;
2、形参数组与实参数组类型要一致,比如:都为int型,否则会出现意想不到的错误。
3、形参数组的大小可以不指定,即使指定了也可以与实参数组大小不一致,因为C编译器对形参数组的大小不做检查,只是将实参数组的首地址传递给形参数组。
3、用多维数组作为函数实参
可以用多维数组名作为形参和实参,形参数组在定义时,可以指定每一维的大小,也可以忽略第一维大小,但不能省略第二维大小。
实参是这些行这些列,形参就尽量跟实参一样(也是这些行,这些列),这样实参能引用的下标和形参一样可以引用,就会保证你不出错。
void changevalue(int b[5][8])
printf("a[0][2]=%d\n",a[0][2]);