C++의 함수에서 2D 배열 반환
이 기사에서는 C++의 함수에서 2D 배열을 반환하는 방법을 소개합니다.
포인터 표기법을 사용하여 C++의 함수에서 2D 배열 반환
포인터에 의한 반환은 값으로 반환하는 것보다 큰 객체에 선호되는 방법입니다. 2D 배열이 상당히 커질 수 있으므로 다음 코드 예제에서와 같이 행렬의 첫 번째 요소에 ‘포인터’를 전달하는 것이 가장 좋습니다. ModifyArr
의 2D 배열 매개 변수는 함수 범위에서 대괄호가있는 요소에 액세스하기 위해 arr[][SIZE]
표기법으로 정의됩니다.
#include <iomanip>
#include <iostream>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::setw;
using std::string;
using std::vector;
constexpr int SIZE = 4;
int *ModifyArr(int arr[][SIZE], int len) {
for (int i = 0; i < len; ++i) {
for (int j = 0; j < len; ++j) {
arr[i][j] *= 2;
}
}
return reinterpret_cast<int *>(arr);
}
int main() {
int c_array[SIZE][SIZE] = {
{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16}};
cout << "input array\n";
for (auto &i : c_array) {
cout << " [ ";
for (int j : i) {
cout << setw(2) << j << ", ";
}
cout << "]" << endl;
}
cout << endl;
int *ptr = ModifyArr(c_array, SIZE);
cout << "modified array\n";
for (int i = 0; i < SIZE; ++i) {
cout << " [ ";
for (int j = 0; j < SIZE; ++j) {
cout << setw(2) << *(ptr + (i * SIZE) + j) << ", ";
}
cout << "]" << endl;
}
cout << endl;
return EXIT_SUCCESS;
}
출력:
input array
[ 1, 2, 3, 4, ]
[ 5, 6, 7, 8, ]
[ 9, 10, 11, 12, ]
[ 13, 14, 15, 16, ]
modified array
[ 2, 4, 6, 8, ]
[ 10, 12, 14, 16, ]
[ 18, 20, 22, 24, ]
[ 26, 28, 30, 32, ]
포인터 대 포인터 표기법을 사용하여 C++의 함수에서 2D 배열 반환
대안으로 포인터 표기법에 대한 포인터를 사용하여 함수에서 배열을 반환 할 수 있습니다. 이 방법은 반환 될 객체가 동적으로 할당되는 경우 다른 방법에 비해 장점이 있습니다. 일반적으로 포인터가 호출자 범위에 반환되면 요소 액세스 식을 수정해야합니다. 배열 주소를int*
로 캐스팅 한 다음 역 참조를 통해 값을 얻습니다.
#include <iomanip>
#include <iostream>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::setw;
using std::string;
using std::vector;
constexpr int SIZE = 4;
int **ModifyArr2(int *arr, int len) {
for (int i = 0; i < len; ++i) {
for (int j = 0; j < len; ++j) *(arr + (i * len) + j) *= 2;
}
return reinterpret_cast<int **>(arr);
}
int main() {
int c_array[SIZE][SIZE] = {
{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16}};
cout << "input array\n";
for (auto &i : c_array) {
cout << " [ ";
for (int j : i) {
cout << setw(2) << j << ", ";
}
cout << "]" << endl;
}
cout << endl;
int **ptr2 = ModifyArr2(c_array[0], SIZE);
cout << "modified array\n";
for (int i = 0; i < SIZE; ++i) {
cout << " [ ";
for (int j = 0; j < SIZE; ++j) {
cout << setw(2) << *((int *)ptr2 + (i * SIZE) + j) << ", ";
}
cout << "]" << endl;
}
cout << endl;
return EXIT_SUCCESS;
}
출력:
input array
[ 1, 2, 3, 4, ]
[ 5, 6, 7, 8, ]
[ 9, 10, 11, 12, ]
[ 13, 14, 15, 16, ]
modified array
[ 2, 4, 6, 8, ]
[ 10, 12, 14, 16, ]
[ 18, 20, 22, 24, ]
[ 26, 28, 30, 32, ]
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook