2015-02-21 2 views
-1

Я создал следующую программу, которая должна возвращать массив int главной функции, которая затем отображает ее на экране.Возвращает массив int

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

И я ожидал, что это напечатать

, но вместо этого она печатает 3 someNumberWhichLooksLikeAPointer 0

Почему? что я могу сделать, чтобы вернуть массив int из моей функции? Большое спасибо!

+1

в returnArray() не делает ничего, чтобы ваш Рез, вы должны использовать параметры –

+1

Обратите внимание, что 'returnArray' фактически не возвращать ничего. И вам нужно выделить память. –

+0

Скомпилирован ли ваш код? – SMA

ответ

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

Он также забыл вернуть указатель массива. –

+0

большое спасибо, теперь он работает! я проголосую за ответ за 7 минут, когда это позволит мне! – SummerCode

1

Вы отметили этот вопрос с C++. Вы 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; 
} 
+0

спасибо, ваше решение действительно действительно чистое и аккуратное! – SummerCode

Смежные вопросы