C++ 함수에서 배열을 반환하는 방법
소개
이 자습서에서는 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 *
(포인터)로 선언했으며 그 정의에서 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()
함수에 의한 배열 반환이 성공적이라는 것이 출력에서 분명합니다.
결론
따라서 이 자습서에서는 C++ 함수에서 배열을 반환할 수 있는 다양한 방법에 대해 배웠습니다.
추가 질문이 있으시면 아래 의견을 자유롭게 사용하십시오.
참조
- 함수에서 C++ 반환 배열 - StackOverflow 질문,
- C++의 2차원 배열 - Journal Dev Post.