C ++在函数内部分配动态数组[关闭]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C ++在函数内部分配动态数组[关闭]相关的知识,希望对你有一定的参考价值。
所以我需要在函数内分配一个int数组。在调用函数之前声明数组(我需要在函数外部使用该数组),并且在函数内部确定大小。可能吗 ?我一直在尝试很多事情,但到目前为止没有任何效果。
感谢您的帮助!这是一些代码:
void fillArray(int *array)
int size = ...//calculate size here
allocate(array, size);
//....
void alloc(int * &p, int size)
p = new int[size];
int main()
//do stuff here
int *array = NULL;
fillArray(array);
// do stuff with the filled array
答案
如果我已正确理解,则在调用函数之前没有声明数组。似乎您声明了一个指向int而不是数组的指针。否则,如果您确实声明了数组,则不能更改其大小并在函数中分配内存。
至少有三种方法可以完成任务。第一个看起来像
int *f()
size_t n = 10;
int *p = new int[n];
return p;
并且函数被称为
int *p = f();
另一种方法是将函数的参数声明为具有指向int的指针的指针。例如
void f( int **p )
size_t n = 10;
*p = new int[n];
并且该函数可以像这样被调用
int *p = nullptr;
f( &p );
第三种方法是使用对指针的引用作为函数参数。例如
void f( int * &p )
size_t n = 10;
p = new int[n];
并且该函数的名称类似于
int *p = nullptr;
f( p );
更好的方法是使用标准类std::vector<int>
代替指针。例如
void f( std::vector<int> &v )
size_t n = 10;
v.resize( n );
并且该函数可以像这样被调用
std::vector<int> v;
f( v );
此外,您也可以使用智能指针,例如std::unique_ptr
以上是关于C ++在函数内部分配动态数组[关闭]的主要内容,如果未能解决你的问题,请参考以下文章