是return * array;有效?

时间:2014-04-09 22:27:31

标签: c++ c arrays function pointers

在C ++中返回指向数组的指针是否有效?

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

什么是正确的方法?

3 个答案:

答案 0 :(得分:1)

您的代码甚至无法编译。如果你的意思是:

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

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

选项包括:

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

答案 1 :(得分:0)

  

在C ++中返回指向数组的指针是否有效?

没有。你的例子根本不会编译:

error: ‘array’ was not declared in this scope

http://ideone.com/h17cH1

如果此数组不是自动变量,则返回指向数组的指针是可以的,因此在函数返回后它仍然存在。例如:

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

不漂亮,但因为不明显谁应该删除这个数组以及什么时候。

答案 2 :(得分:0)

是和否。是的,因为这是你应该归还它的方式。不,因为您应该(并且必须)使用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]的数组,它将在函数结束时“消失”(它都是关于变量范围的)。