ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

【c++】c语言入门到c++使用高手: c语言入门之函数(四)

【c++】c语言入门到c++使用高手: c语言入门之函数(四)

第七章 函数

第四节 数组作为函数参数

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; }
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进