gpt4 book ai didi

c++ - 数组作为函数的参数

转载 作者:太空宇宙 更新时间:2023-11-03 10:22:59 25 4
gpt4 key购买 nike

在 f() 中,我接受最大大小为 4 的数组,但当我传递大小大于 4(此处为 10)的数组时它仍然运行良好,我知道 C++ 中的数组默认作为指针传递,但比这种传递数组的方法什么时候有用?

#include<iostream>

using namespace std;

void f(int a[4]){
for(int i = 0;i < 3;i++){
a[i] += 10;
}
}

int main(){
int a[10];
for(int i = 0;i < 10;i++)
a[i] = i;
f(a);
for(int i =0 ;i < 10;i++){
cout<<a[i]<<" ";
}
cout<<"\n";
return 0;
}

输出:10 11 12 3 4 5 6 7 8 9

最佳答案

I know arrays in c++ are passed as pointers by default

正确。

这个:

void foo(int a[4])

字面重写为:

void foo(int* a)

…然后当您调用该函数时,您的数组名称衰减为指针,匹配重写/“真实”参数类型。

所以你根本没有真正传递一个数组。

When is this method of passing array useful?

从不。

这是从 C 继承而来的可耻怪癖。有人可能会争辩说 [4]对开发人员来说是一个有用的提示,即指向的数组“应该”有四个元素,但现代智慧认为这只是不必要且危险的误导。

更好的选择包括:

  • 指针/大小对(两个参数):这本身的危险性并没有降低,但至少它不会在类型上撒谎并让您产生一种错误的安全感!
  • 按引用排列:可爱多变,但不太灵活
  • std::array<int, 4> (引用):同上,但更整洁

关于c++ - 数组作为函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55954231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com