如何从函数将数组传递给main - C ++

时间:2017-01-28 11:23:23

标签: c++ arrays function return

我有一个C ++程序。我有一个初始化整数数组的函数,但我不知道如何将它传递给main。我试过这种方式但是有很多错误。

主要

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

2 个答案:

答案 0 :(得分: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;
}

然后如果你想访问数组,只需再次使用一个指针(如cout&lt;&lt; *(firstArray + 2)将打印数组[2])。还要注意,你需要在函数static中声明数组(所以如果你需要变量大小只是声明一个更大的数组)。

答案 1 :(得分: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方法需要对malloc和realloc进行裸调用,以及这些调用失败时的逻辑。不要被相当笨重的模板语法所拖延。