C ++在函数内部分配动态数组[关闭]

问题描述 投票:1回答:1

所以我需要在函数内分配一个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
 }
c++ vector pass-by-reference dynamic-memory-allocation function-definition
1个回答
10
投票

如果我已正确理解,则在调用函数之前没有声明数组。似乎您声明了一个指向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

© www.soinside.com 2019 - 2024. All rights reserved.