将动态数组传递给其他函数的正确方法

nok*_*oko 7 c++ arrays dynamic

将动态大小的数组传递给另一个函数的最"正确"的方法是什么?

bool *used = new bool[length]();
Run Code Online (Sandbox Code Playgroud)

我想出了一些编译的方法,但我不太确定正确的方法是什么.

例如

这些会超过价值吗?

static void test(bool arr[])

static void test(bool *arr)
Run Code Online (Sandbox Code Playgroud)

这个会通过引用传递吗?

static void test(bool *&arr)
Run Code Online (Sandbox Code Playgroud)

谢谢

ale*_*nis 10

实际上,两个第一个想法通过地址传递数组,第三个通过引用传递数组.您可以设计一个小测试来检查:

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;
}
Run Code Online (Sandbox Code Playgroud)

这个测试的输出是

1
2
3
Run Code Online (Sandbox Code Playgroud)

如果参数是按值传递,则无法在函数内部对其进行修改,因为修改将保留在函数的范围内.在C++中,数组不能通过值传递,因此如果要模仿此行为,则必须传递a const int*或a const int[]作为参数.这样,即使数组是通过引用传递的,也不会因为函数而在函数内部进行修改const属性而.

要回答你的问题,首选的方法是使用a std::vector,但如果你绝对想要使用数组,你应该去int*.

  • 你没有`删除'数组......> :( (2认同)

joh*_*ohn 4

你说得对。前两个是等效的,并且按值传递指针。从风格上讲,第二个是首选,因为它准确地描述了情况,即您正在传递一个指向函数的指针。第一个对于那些不太相信不能在 C++ 中传递数组的人来说是一种宿醉。C++ 中无法按值传递数组。第三个通过引用传递指针。

这里存在一个混乱,因为在所有情况下指针都“引用”您的数组。因此,当谈论按值传递或按引用传递时,您应该清楚您是在谈论指针还是它引用的数组。