Как вернуть массив в функции 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++ — запись журнала для разработчиков.