繁体   English   中英

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

[英]How do I pass a reference to an array, whose size is only known at run-time, as a function parameter?

我有一个根据用户输入动态创建的数组,我需要将该数组传递给一个函数,在该函数中对其进行操作,然后将结果传递回原始数组。 当我尝试使用

void MyFunction(int (&MyArray)[])

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

你不能 您可以使用std::vector

您可以提供一个指向数组第一个元素的指针+一个保存数组大小的第二个参数。

如果它只是一个数组,为什么不将数组本身及其大小作为第二个参数传递呢? (通过将数组作为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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM