2011-12-25 81 views
0

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


#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; 
    } 
+1

你这里是什么'int'指针数组,而不是一个指向整数数组。 http://stackoverflow.com/questions/859634/c-pointer-to-array-array-of-pointers-disambiguation – 2011-12-25 13:10:08

回答

3

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

+0

它已经分配新的!返回数组在这里不起作用 – codeflow 2011-12-25 13:12:20

+0

@codeflow:不,每个数组的* item *被分配了'new',但不是_whole_数组。 – Vlad 2011-12-25 13:16:11

+1

@codeflow:元素分配新的,你应该分配**数组本身**:'int * array = new int [10];'我将它添加到我的答案。 – amit 2011-12-25 13:16:17

1

你的阵列是在堆栈中分配,所以只要函数返回时,它释放。所以你想要返回一个指向死内存的指针。

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

所以,你必须做的:

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

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

using namespace std; 

vector<int> arrayfunc() 
{ 
    vector<int> v; 
    v.push_back(10); 
    ... 
    return v; 
} 

... 

vector<int> result = arrayfunc(); 
cout << result[0] << ... 

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

(Nitpicking :)由于所有现代C++编译器都使用RVO,因此不需要关心复制向量。


分配上堆阵列应该是简单,太:

int* array = new int[4]; 
array[0] = 10; 
... 
return array; 

... 
int* array = arrayfunc(); 
... 
delete[] array; 

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

+0

不,实际上他正在返回一个指向第一个int的指针,它是动态分配的,因为他的数组是一个指针数组。 – amit 2011-12-25 13:04:23

+0

但我分配它新的,它如何可以堆栈? – codeflow 2011-12-25 13:05:03

+0

我想访问数组中的所有元素不仅仅是第一个 – codeflow 2011-12-25 13:06:45

0

这段代码在几个层面上似乎是错误的。

  1. 永远不会返回函数的内部变量。变量数组只在函数中定义,所以它不应该返回到外部。

  2. 为什么你自己分配每个int与新?我会一次分配整个数组。如果你知道数组的长度并且它是不变的,那么考虑让它静态定义。

+0

我试图返回一个指向堆中分配的元素的指针。我们不知道数组的长度 – codeflow 2011-12-25 13:17:49

+0

'int array [] = new int [10];数组[0] = 17;数组[1] = 18;返回数组;' – talkol 2011-12-25 13:21:36

0

刚刚尝试的return array;代替return *array;

+3

它会在很多方面失败... – amit 2011-12-25 13:09:16

+0

它失败..... – codeflow 2011-12-25 13:10:46

+0

我敢肯定它会失败不是因为这个:)他必须做一些初始化 – 2011-12-25 13:11:34