是return*数组;有效的

Is return *array; valid?

本文关键字:有效 数组 return      更新时间:2023-10-16

像这样在C++中返回指向数组的指针有效吗?

int* function(int n){
   int i;
   for(i = 0; i<=n ; i++){
       int array[i] = i;
   }
  return *array;
}

正确的方法是什么?

您的代码甚至还不可编译。如果你的意思是:

int *foo()
{
     int x[5] = { 0 };
     return x;
}

则此代码不正确,因为当foo()返回时,数组x将不存在,因此指针将不再指向有效存储。

选项包括:

  • 让调用者分配空间,函数写入该空间
  • 返回一个包含数组的容器,例如C中的std::vector++
  • 返回一个指向C中动态分配的数组的指针。调用方必须记住free

是和否。是,因为这是您应该返回的方式。否,因为您应该(并且必须)使用new[]运算符(或malloc函数)。所以基本上你应该写:

int* function(int n){
 int i = 0;
 int *array = new int[n]; // or c-style malloc(n*sizeof(int))
 for(i = 0; i<=n ; i++){
  array[i] = i;
 }
 return array;
}

为什么?因为如果你用int array[i]创建一个数组,它会在函数结束时"消失"(这都是关于变量范围的)。

像这样在C++中返回指向数组的指针有效吗?

没有。您的示例根本无法编译:

error: ‘array’ was not declared in this scope

http://ideone.com/h17cH1

如果这个数组不是自动变量,那么返回一个指向数组的指针是可以的,所以在函数返回后它仍然存在。例如:

int* function(int n){
   int * array = new int[i]();
   return array;
}

虽然不漂亮,因为不清楚谁应该删除这个数组以及何时删除。