用数组指针作函数参数

搞不懂这两个函数的实参和形参的区别
为什么average的实参是带星号的score
而search的实参是不带星号的score
还有还有,用指针作函数参数的时候,实参什么时候用星号什么时候不用啊
帮帮我😭

img

实参形参其实就是赋值的关系
比如一个函数void func(int a)
这里a是形参
要调用的时候肯定要先定义一个int b,然后调用func(b),这里b是实参
那么它们的关系其实就是a=b这样赋值过去,没有什么神奇的
那么到底传实参的时候要传什么类型,就看形参需要什么类型
形参需要指针那你就传指针,需要值就传值
就好比int *a=&b这样,a是指针就得传b的地址而不是把b的值传给它
--==-=
那么知道了这些,再回到你的问题
这里score是个二维数组
第一个函数的参数是个一维数组,那就要用*score将它解一次地址变成一维数组指针再传进去
补充:数组也是指针,二维数组相当于二级指针
第二个函数参数是个指针数组,所以本身也是二维的,正好和score的类型对应,就直接传

average的参数要求是个指针,而search要求参数是个指针数组啊
虽然score是个二维数组,但实际内存是连续的,所以可以当做一维数组看待,进行数组元素遍历

以下内容参考GPT内容,仅供作者参考

在使用指针作为函数参数时,需要注意实参和形参之间的区别。在传递指针作为函数参数时,实参可以使用星号或不使用星号,具体取决于需要传递的指针类型。

如果需要传递的是指向某个变量的指针,那么在实参前面需要添加星号,以获取该变量的地址。例如:

void func(int* ptr) {
    // ...
}

int main() {
    int x = 10;
    func(&x); // 传递指向x的指针
    return 0;
}

在这个例子中,我们定义了一个函数func,它接受一个指向整数的指针作为参数。在main函数中,我们定义了一个整数变量x,并使用&运算符获取该变量的地址,并将其传递给func函数。

如果需要传递的是指针本身,而不是指针所指向的变量的地址,那么在实参前面不需要添加星号。例如:

void func(int** ptr) {
    // ...
}

int main() {
    int* p = nullptr;
    func(&p); // 传递指向指针p的指针
    return 0;
}

在这个例子中,我们定义了一个函数func,它接受一个指向指针的指针作为参数。在main函数中,我们定义了一个指向整数的指针p,并使用&运算符获取该指针的地址,并将其传递给func函数。

需要注意的是,在使用指针作为函数参数时,必须确保指针的类型与函数参数的类型匹配。否则,可能会导致类型不匹配的错误。