返回一个int数组

时间:2015-02-21 07:24:25

标签: c++ arrays pointers

我创建了以下程序,该程序应该将一个int数组返回给main函数,然后将其显示在屏幕上。

#include <iostream.h>
int* returnArray(){
    int* arr;
    arr[0]=1;
    arr[1]=2;
    arr[2]=3;
    return arr;
}
int main(){
    int* res = returnArray();
    for(int i=0; i<3; i++){
        cout<<res[i]<<" ";
    }
    return 0;
}

我期待它打印

  

1 2 3

但相反,它打印3 someNumberWhichLooksLikeAPointer 0

为什么?我该怎么做才能从我的函数中返回一个int数组?非常感谢你!

2 个答案:

答案 0 :(得分:1)

您忘了分配阵列:

int* arr = new int[3];

您还需要返回它,并在完成循环后释放main内的内存以避免内存泄漏:

delete[] res;

虽然这种方法有效,但并不理想。如果您可以选择退回容器,比如std::vector<int>,那将是一个更好的选择。

如果你必须使用普通数组,那么在API中填充数组的另一个解决方案就是将其传递给它:

void fillArray(int *arr, size_t s){
    if (s > 0) arr[0]=1;
    if (s > 1) arr[1]=2;
    if (s > 2) arr[2]=3;
}

int main(){
    int res[3];
    fillArray(res, 3);
    for(int i=0; i<3; i++){
        cout<<res[i]<<" ";
    }
    return 0;
}

答案 1 :(得分:1)

您已使用C++标记了问题。 You Yous应该考虑使用C ++解决方案:使用int

的向量
#include <iostream>
#include <vector>

std::vector<int> returnArray(){
    std::vector<int> arr(3);
    arr[0]=1;
    arr[1]=2;
    arr[2]=3;
    return arr;
}
int main(){
    std::vector<int> res = returnArray();
    for(int i=0; i<3; i++){
        std::cout<<res[i]<<" ";
    }
    return 0;
}