如何返回一个填充在函数内的全局数组,以便我可以在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
}
由于
答案 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
}