将动态大小的数组传递给另一个函数的最“正确”方法是什么?
bool *used = new bool[length]();
我想出了几种编译方法,但我不太确定正确的方法是什么。
例如
这些会按值传递吗?
static void test(bool arr[])
static void test(bool *arr)
这个会通过引用传递吗?
static void test(bool *&arr)
谢谢
最佳答案
实际上,第一个想法是通过地址传递数组,而第三个想法是通过引用传递数组。您可以设计一个小测试来检查这一点:
void test1(int* a) {
a[0] = 1;
}
void test2(int a[]) {
a[1] = 2;
}
void test3(int *&a) {
a[2] = 3;
}
int main() {
int *a = new int[3]();
a[0] = 0;
a[1] = 0;
a[2] = 0;
test1(a);
test2(a);
test3(a);
cout << a[0] << endl;
cout << a[1] << endl;
cout << a[2] << endl;
}
这个测试的输出是
1
2
3
如果参数是按值传递的,则不能在函数内部对其进行修改,因为修改将保留在函数的范围内。在 C++ 中,数组不能按值传递,所以如果你想模仿这种行为,你必须传递一个 const int*
或一个 const int[]
作为参数.这样,即使数组通过引用传递,它也不会因为 const
属性而在函数内部被修改。
要回答您的问题,首选方法是使用 std::vector
,但如果您绝对想使用数组,则应该使用 int*
.
关于c++ - 将动态数组传递给其他函数的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13006250/