第七章 函数
第四节 数组作为函数参数
1. 数组元素作为函数实参
#include <iostream>
int whichmax(int x, int y) {
return (x > y ? x : y);
}
int main() {
std::cout << "Hello, World!" << std::endl;
//相当于定义了10个变量,a[0]-a[9]
int a[10];
a[0] = 100;
a[1] = 12;
int res = whichmax(a[0], a[1]);
printf("whichmax res: %d\n", res);
return 0;
}
2. 数组名作为函数实参
-
实参和形参个数要相等,类型要一致,按顺序对应,一一传递
-
实参变量对形参变量的数据传递是值传递,也就是单项传递,只由实参传递给形参,不能由形参传递实参
-
数组名可以作为函数实参,数组名代表的是数组首地址,当将数据名作为函数的实参传递时,此时传递的是数组的首地址,
此时,函数中的形参也应该使用数组名(也可以是数组指针) -
数组名作为函数参数时,不是值传递,不是单项传递,而是把实参数组的开始地址传递给了形参数组,
这样两个数组就会共同占用一段内存,这个是叫地址传递(不重新分配内存了),也就是说,形参数组中各个元素的值如果发生了变化,
会导致实参数组元素的值也发生相应改变,这一点,是与变量做函数参数明显不同的
说明:
- 1.如果实参为数组名,形参也为数组名
- 2.形参数组与实参数组类型要一致,比如都为int型,否则会得到意想不到的错误
- 3.形参数组大小可以不指定,即便制定了也可以与实参数组大小不一致,因为c编译器对形参数组大小不做检查,
只是将实参数组的首地址传给了形参
3. 用多维数组名作为函数实参
-
可以用多维数组名作为实参和形参,形参数组在定义是,可以指定每一维的大小,也可以省略第一维的大小,
但不能省略第二维的大小 -
实参和形参尽量保证行列一致,这样实参和形参引用的下标可以保持一致,减少错误的几率
#include <iostream>
void changVal(int b[3][4]) {
b[0][0] = 20;
b[1][2] = 0;
b[2][3] = 50;
return;
}
int main() {
std::cout << "Hello, World!" << std::endl;
int a[3][4] = {85, 70, 98, 92, 78, 40, 90, 33, 80, 75, 64, 84};
changVal(a);
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
printf("the value of a[%d][%d]: %d\n", i, j, a[i][j]);
}
}
return 0;
}