2017-01-28 3 views
-2

У меня есть программа на C++. У меня есть функция, которая инициализирует целочисленный массив, но я не знаю, как передать его в основной. Я попытался таким образом, но есть много ошибок.Как передать массив в main из функции - C++

ГЛАВНАЯ

#include <stdio.h> 
#include <stdlib.h> 
#include <iostream> 

using namespace std; 

int readArray1(); 


int nArray1, nArray2; 

int main() { 

    int firstArray[nArray1]; 
    int secondoVettore[nArray2]; 

    firstArray[nArray1] = readArray1(); 
    secondArray[nVettore2] = readArray2(); 

    system("pause"); 
    return 0; 

} 

ReadArray1

int readArray1() { 


    int array[nArray1]; 

    cout<<"Insert the length of the array: "<<endl; 
    cin>>nVettore1; 

    for(int i=0; i<nArray1; i++) { 
     cout<<"Insert the"<<i+1<<" element of the array: "<<endl; 
     cin>>array[i]; 
    } 

    return array[nArray1]; 
} 
+0

Вы используете 'std :: vector <>' (по крайней мере, я бы). – WhozCraig

+0

Прочитайте что-нибудь о том, какие типы, ценности и как работают функции, потому что вы, очевидно, не приложили достаточно усилий, прежде всего, чтобы другие могли вам помочь. – szpanczyk

+1

Возможный дубликат [Возвращаемый массив в функции] (http://stackoverflow.com/questions/3473438/return-array-in-a-function) –

ответ

0

Вы не можете вернуть весь массив из функции. Однако вы можете вернуть адрес массива, который вы получили в своей функции.

Для этого просто измените функцию, чтобы возвращать адрес с указателем и использовать переменную для хранения адреса и указания местоположения. Изменение части вашего примера необходимый код становится:

#include <stdio.h> 
#include <stdlib.h> 
#include <iostream> 
using namespace std; 
int nArray1=10; 
int * readArray1() { 
    static int array[10]; 
    for(int i=0; i<10; i++) { 
     cout<<"Insert the"<<i+1<<" element of the array: "<<endl; 
     cin>>array[i]; 
     cout<<&array[i]; 
    } 
    return array; 
} 
int main() { 
    int * firstArray; 
    firstArray = readArray1(); 
    system("pause"); 
    return 0; 
} 

затем, если вы хотите получить доступ к массиву просто использовать указатель снова (как соиЬ < < * (firstArray + 2) распечатывает массив [2]). Также обратите внимание, что вам нужно объявить массив в функции static (так что если вам нужен переменный размер, просто объявите массив большего размера).

0

std :: vector - огромная помощь.

std::vector<int> readarray() 
    { 
     std::vector<int> answer; //. answer is here the empty array 

     while(acondition) 
     { 
     int x = input(): 
     answer.push_back(x); 
     } 

    return answer; 
    } 

Это намного проще, будучи в состоянии обрабатывать массив как единое целое, что метод C, который требует обнаженных вызовы на таНос и перераспределить, и логику для того, когда эти вызовы не в состоянии. Не отвлекайтесь на довольно неуклюжий синтаксис шаблонов.