如何在C ++中返回指向数组的指针?

时间:2011-12-25 13:00:23

标签: c++ arrays pointers

这是我的简单代码   arrayfunc()应该在数组中存储一些数字,并返回该数组的指针   到将打印数组内容的main函数   我的代码有什么问题?   它只返回指向数组第一个元素的指针   任何帮助将不胜感激。   提前谢谢。


   #include <iostream>

   using namespace std;

   //The definition of the function should remain the same
   int* arrayfunc()
   {
    int *array[10];
    array[0] =new int;
    array[1] =new int;
    array[2] =new int;
    array[3] =new int;

    *array[0]=10;
    *array[1]=11;
    *array[2]=12;
    *array[3]=13;

    return  *array;

   }

   int main()
   {


    for(int i=0;i<4;i++)
    cout<<*(arrayfunc()+i)<<endl; 

     return 0;
   }

5 个答案:

答案 0 :(得分:3)

(1)如果你想要返回它,你应该用new分配你的数组:int* array = new int[10]; [假设你在这里需要int的数组,而不是int*的数组}的]
(2)返回指向数组中第一个元素的指针,使用return array而不是return *array
(3)你的数组是指针数组,而不是整数数组。

答案 1 :(得分:1)

你的数组是在堆栈上分配的,所以只要函数返回,它就会被释放。所以你想要一个指向死记忆的指针。

但是你没有这样做,你只是返回第0个数组项的有效(副本)值。

那么,你需要做什么:

  1. 最好的想法是切换到stl容器。你应该使用std :: vector或类似的东西。
  2. 如果你坚持手动内存管理的想法,你必须在堆上分配数组,从函数中返回它,并可能在调用者中释放它。

  3. 编辑:
    基本上你想要以下内容:

    using namespace std;
    
    vector<int> arrayfunc()
    {
        vector<int> v;
        v.push_back(10);
        ...
        return v;
    }
    
    ...
    
    vector<int> result = arrayfunc();
    cout << result[0] << ...
    

    这将是正确的C ++方式。

    (挑剔:)由于所有现代C ++编译器都使用了RVO,因此您无需关心复制向量。


    在堆上分配数组也应该很简单:

    int* array = new int[4];
    array[0] = 10;
    ...
    return array;
    
    ...
    int* array = arrayfunc();
    ...
    delete[] array;
    

    但我强烈建议采用前一种方法(使用矢量)。

答案 2 :(得分:0)

这个代码对我来说在几个层面上都是错误的。

  1. 永远不要返回函数的内部变量。变量数组仅在函数中定义,因此不应将其返回到外部。

  2. 为什么要用new分配每个int?我会立刻分配整个数组。如果您知道数组长度并且它是常量,请考虑静态定义。

答案 3 :(得分:0)

答案 4 :(得分:0)

只需尝试return array;而不是return *array;