如何在C++函数中返回数组

时间:2020-02-23 14:30:03  来源:igfitidea点击:

介绍

在本教程中,我们将了解如何从C++函数中返回数组。

在C++函数中返回数组的方法

通常,无法将整个数组返回给函数调用。
我们只能使用指针来做到这一点。

此外,在C++中用指针的返回类型声明函数并返回C类型数组的地址并不适用于所有情况。
编译器会针对返回局部变量发出警告,甚至在输出中显示一些异常行为。

因此,从C++中的函数返回数组并不是那么容易。
但是我们可以通过以下任何一种方法来实现。

1.使用指针

如前所述,使用指针从函数返回普通数组有时会给我们带来意想不到的结果。
但是可以通过将数组声明为"静态"数组来避免这种行为和警告。

让我们看看如何。

#include<iostream>
using namespace std;

int* demo() //return type- address of integer array
{
	static int a[5]; //array declared as static
	for(int i = 0; i<5; i++)
	{
		a[i] = i; //array initialisation
	}

	return a; //address of a returned
}

int main()
{
	int* ptr; //pointer to hold address
	int i;
	ptr = demo(); //address of a
	cout<<"Array is: ";
	for(i=0 ; i<5; i++)
		cout<<ptr[i]<<"\t"; //ptr[i] is equivalent to *(ptr+i)
		
	return 0;
}

输出:

Array is: 0     1       2       3       4

其中我们已经声明了函数demo(),其返回类型为int *(pointer),在其定义中,我们已经将a(既作为数组名又作为基地址)返回给函数调用的位置在main()中。

从上面的输出中可以看到,该函数成功返回了数组。

2.在C++中使用结构

我们还可以通过在C++中的结构内部声明函数来使函数返回数组。
让我们看看如何。

#include <iostream>
using namespace std;

struct demo
{
	//array declared inside structure
	int arr[100];
};

struct demo func(int n) //return type is struct demo
{
	struct demo demo_mem; //demo structure member declared
	for(int i=0;i<n;i++)
	{
		//array initialisation
		demo_mem.arr[i] = i;
	}
	return demo_mem; //address of structure member returned
}

int main() 
{
	struct demo a;
	int n=5; //number of elements
	
	a=func(n); //address of arr
	
	cout<<"The Array is : ";
	for(int i=0;i<n;i++)
	{
		cout<<a.arr[i]<<"\t";
	}
	
	return 0;
}

输出:

Array is: 0     1       2       3       4

其中请注意,我们在结构" demo"中声明了数组" arr"。
这次函数具有结构本身的返回类型,并返回" demo_mem"(结构变量)而不是数组。

这样,通过使用另一个结构变量" a",我们可以在" main()"函数中访问数组" arr"。

3.使用std :: array

对于C++中的" std :: array",实际上从函数返回数组名称将转换为整个数组,并将其返回到函数调用的位置。

#include <iostream>
#include<array>
using namespace std;

std::array<int,5> func() //function with return type std::array
{
  std::array<int,5> f_array; //array declared
  
	for(int i=0;i<5;i++)
	{
		//array initialisation
		f_array[i] = i;
	}

  return f_array; //array returned
}

int main() 
{
	std::array<int,5> arr; //array with length 5
	
	arr=func(); //function call
	
	cout<<"The Array is : ";
	for(int i=0;i<5;i++)
	{
		cout<<arr[i]<<"\t";
	}
	
	return 0;
}

输出:

Array is: 0     1       2       3       4

因此,从输出中可以明显看出,由函数func()返回的数组是成功的。