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

标签 c++ arrays dynamic

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

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/

相关文章:

C#:如何动态加载/实例化 DLL?

c++ - 为什么更改非常量字符 * 会出现段错误?

javascript - Html 和 JavaScript : How to return user input

c++ - 为什么 C++ 需要 6 大小的数组来存储 5 个字母的单词,而 C 只允许 5 个?

java - 使用日期对 String[] 进行排序

java - 从另一个 Java 文件动态编译和运行 Hadoop 作业

c++ - 我在 C++/cli 中的函数的返回值始终为 1

c++ - 类函数上的新线程

c++ - 使用 std::list 时内存泄漏

java - 如何从 Wicket 中的 Java 文件动态添加 HTML 代码?