在c ++中返回一个全局数组

时间:2014-11-22 19:29:52

标签: c++

如何返回一个填充在函数内的全局数组,以便我可以在C ++的其他函数中使用它?

例如:

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

using namespace std;

int global[10]

//POPULATE THE ARRAY HERE
int functionReturnArray()
{
int i;

     for(i=0;i<=9;i++)
     {
      global[i] =i;

      if(i==9)
        {
         return global;
         }
      } 

}//close function

int main()
{
      int local = functionReturnArray();
      for(int i=0;i<10;i++)
      local[i];// I WANT TO USE THE ARRAY HERE
      return 0
}

由于

4 个答案:

答案 0 :(得分:4)

  

如何返回一个填充在函数内部的全局数组,以便我可以在C ++中的其他函数中使用它?

您不能在C ++中返回数组,也不能将其传递给函数,因为数组会“衰减”到指向其第一个元素的指针。

您可以返回int*,但正如上面的评论所说,如果数组是全局的,为什么还需要返回呢?全球可以访问全球,只需直接使用它。

答案 1 :(得分:3)

如果要返回数组, 你只能返回指向数组的指针(返回类型为int *)。

int global[10]

int* functionReturnArray()
{
    for(int i=0; i<10; i++)
    {
        global[i] = i;
    }
    return global
}

int main()
{
    int* local = functionReturnArray();
    for(int i=0; i<10; i++)
    {
        local[i]; // I want to use the array here
    }
    return 0
}

答案 2 :(得分:3)

数组既没有复制构造函数也没有复制赋值运算符。

以下是该任务的一些方法

使用对全局数组的本地引用:

#include <iostream>

const size_t N = 10;

int global[N];

int ( &functionReturnArray() )[N]
{
    for ( size_t i = 0; i < N; i++ )
    {
        global[i] = i;
    }

    return global;
}

int main() 
{
    int ( &local )[N] = functionReturnArray();

    for ( int x : local ) std::cout << x << ' ';
    std::cout << std::endl;

    return 0;
}

输出

0 1 2 3 4 5 6 7 8 9

使用指向全局数组的第一个元素的指针

#include <iostream>

const size_t N = 10;

int global[N];

int * functionReturnArray()
{
    for ( size_t i = 0; i < N; i++ )
    {
        global[i] = i;
    }

    return global;
}

int main() 
{
    int *local = functionReturnArray();

    for ( size_t i = 0; i < N; i++ ) std::cout << local[i] << ' ';
    std::cout << std::endl;

    return 0;
}

输出

0 1 2 3 4 5 6 7 8 9

使用标准类std :: array

#include <iostream>
#include <array>
#include <algorithm>

const size_t N = 10;

int global[N];

std::array<int, N> functionReturnArray()
{
    for ( size_t i = 0; i < N; i++ )
    {
        global[i] = i;
    }

    std::array<int, N> a;

    std::copy( global, global + N, a.begin() );

    return a;
}

int main() 
{
    std::array<int, N> local = functionReturnArray();

    for ( int x : local ) std::cout << x << ' ';
    std::cout << std::endl;

    return 0;
}

输出

0 1 2 3 4 5 6 7 8 9

第一种和第三种方法的优点是本地数组(引用和类型为std :: array的对象)保存有关其大小的信息。

答案 3 :(得分:2)

你应该返回一个指向数组中第一个元素的指针

int* functionReturnArray()

然后你可以在主函数

中使用它
int main()
{
      int *local = functionReturnArray();
      for(int i=0;i<10;i++)
      local[i];// I WANT TO USE THE ARRAY HERE
      return 0
}