1.数组元素作为函数实参 --- 此时函数的形参 是一个与实参类型相同变量即可
void printInt(int a);
printInt(a[0]);
2.数组作为函数的形参 --- 数组作为函数参数,传递的是数组的首元素的地址。
void printArray(int a[10]); //此时 形式上写成数组
//编译器最终 是当做指针变量来看的
void printArray(int *a); //实际是这样的
注意:
1.被调函数的形参和主调函数中的实参,定义一样的情况下
(1)(形参int a;实参int a)若为数值变量,二者不是一个东西,是独立的,a代表不同的内存空间,传参只是传了实参a空间上的数值给形参a用(此a非彼a)
(2)(形参int a[ ];实参int a[ ])若为数组变量,二者是一个东西,不是独立的,a代表相同的内存空间首地址,传参传递的是实参数组的首元素的地址供形参用。因此,形参与实参具有相同的首元素地址,即共用同一存储单元,具有相同的值。形参数组内的值发生变化,也就是实参数组中的值发生了变化(重点)。
形参int a[n] 实参int b[n] 指的是同一内存空间。哪怕二者变量名不同 (此a是彼a,也是b)
2.
(1) 用数组作函数参数,应在主调函数和被调函数分别都定义数组,例中 int a
是形参数组名, int b 是实参数组名,分别在其所在函数中定义,不能只在一方定义。
(2) 实参数组与形参数组类型应一致,如不一致,结果将出错。
(3) 在被调用函数中声明了形参数组的大小为 10(void printArray(int a[10])), 但在实际上,指定其大小是不起任何作用的,因为编译器对形参数组大小不做检查,只是将实参数组的首元素的地址传给形参数组。(数组传参只传地址)
(4) 形参数组可以不指定大小,在定义数组时在数组名后面跟一个空的方括号。
void printArray(int a[ ])
一维整型数组作为函数的形参:
a.一个是数组形式
b.数组长度
void printArray(int a[10],int len); //形参
printArray(a,len); //实参 (1)数组名, (2)数组长度
练习:
找出数组中的最大值
练习:
数组排序
一维字符型数组,做函数形参
void printStr(char s[1000]); //形式上 写成字符数组的形式
void printStr(char * s); //实际上编译器最终当做指针变量处理
函数调用:
void printStr(char s[1000])
printStr(s); //数组名
//注意: 此时不需要传数组长度 ---因为字符串有结束标志
练习:
实现输入 函数
//1.如何往字符数组中输入多个字符 ?
//2.最终处理成字符串 加'\0'
练习:
统计字符串长度 函数