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;
}
发布了359 篇原创文章 · 获赞 248 · 访问量 66万+

猜你喜欢

转载自blog.csdn.net/Felaim/article/details/105666091