如何将对大小仅在运行时已知的数组的引用作为函数参数传递?

时间:2011-03-01 15:39:24

标签: c++ arrays

我有一个基于用户输入动态创建的数组,我需要将该数组传递给将被操作的函数,并将结果传递回原始数组。当我尝试使用

void MyFunction(int (&MyArray)[])

我的编译器抱怨它不知道数组有多大。

3 个答案:

答案 0 :(得分:3)

你做不到。你可以使用std::vector

答案 1 :(得分:1)

您可以指定数组的第一个元素+第二个包含数组大小的参数。

答案 2 :(得分:0)

如果它只是一个数组,为什么不将数组本身及其大小作为第二个参数传递? (通过将数组作为int*int[]传递,就C ++而言也是如此)。 由于包含数组的变量的值只是指向数组第一个元素的指针,因此最终不会通过复制数组的内容来杀死运行时,而只是指向一个尽可能小的指针。在这种情况下。

void MyFunction( int MyArray[], int size ) { /* edit the array */ }
int main() {
    // read nrElements
    // ...

    // create the array
    int *a = new int[nrElements];
    // populate it with data
    // ...
    // and then
    MyFunction(a, nrElements);
}

只有当您想要在函数中调整数组大小时才应使用std::vector(例如向其中添加新元素),否则您可以坚持使用此方法,因为它更快。

顺便说一下,你需要引用一个数组的唯一情况是你想要在调用函数时改变你传入的变量的值,就像在,使它指向一个不同的数组。喜欢在:

void createMyArray(int* &array, int nrElements) {
    array = new int[nrElements];
    for (int i = 0; i < nrElements; ++i) {
        array[i] = 0;
    }
}

int *a = (int []) {1, 2, 3};
std::cout << a[0] << std::endl; // prints 1
createMyArray(a, 10);
// now  a  points to the first element of a 10-element array
std::cout << a[0] << std::endl; // prints 0

但是你说在将数组提供给函数之前已经创建了数组,使用引用是没有意义的。