Поиск по сайту:

Как вернуть массив в функции C++


Введение

В этом уроке мы собираемся понять, как мы можем вернуть массив из функции в C++.

Методы возврата массива в функции C++

Как правило, возврат всего массива в вызов функции невозможен. Мы могли сделать это только с помощью указателей.

Более того, объявление функции с возвращаемым типом указателя и возвратом адреса массива типа C в C++ работает не во всех случаях. Компилятор выдает предупреждение о возврате локальной переменной и даже показывает ненормальное поведение на выходе.

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

Давайте приступим к делу.

1. Использование указателей

Как мы упоминали ранее, возврат обычного массива из функции с помощью указателей иногда дает нам неожиданные результаты. Но такого поведения и предупреждений можно избежать, объявив массив static.

Давайте посмотрим, как.

#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 *(указатель) и в ее определении мы вернули 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

Здесь обратите внимание, что мы объявили массив arr внутри структуры demo. И на этот раз функция имеет возвращаемый тип самой структуры и возвращает demo_mem (переменная структуры) вместо массива.

Таким образом, используя другую структурную переменную a, мы можем получить доступ к массиву arr в функции main().

3. Использование std::array

Для std::array в C++ возврат имени массива из функции фактически означает, что весь массив возвращается на место вызова функции.

#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() прошел успешно.

Заключение

Итак, в этом уроке мы узнали о различных методах, с помощью которых мы можем вернуть массив из функции C++.

Если у вас возникнут дополнительные вопросы, не стесняйтесь использовать комментарии ниже.

Рекомендации

  • С++ возвращает массив из функции — вопрос StackOverflow,
  • Двумерный массив в C++ — запись журнала для разработчиков.