![](/img/trans.png)
[英]How to create an array of pointers inside a function whose size is not known till run time
[英]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.