C++ 2차원 배열 함수 리턴 - c++ 2chawon baeyeol hamsu liteon

전체 배열은 C++에서 함수에 대한 매개변수로 제공될 수 없습니다. 그러나 배열의 제목을 표시하여 인덱스를 정의하지 않고 배열에 대한 포인터를 할당합니다. 1차원 배열을 메서드의 매개변수로 제공하기로 결정했다면 속성 형식화된 인수를 지정해야 합니다. 그리고 2D 배열을 인수로 제공할 때 포인터에 대한 포인터가 아니라 배열에 대한 포인터를 반환합니다.

다차원 배열의 초기 멤버는 다른 배열입니다. 따라서 2차원 배열을 제공하면 배열에 대한 참조로 분리됩니다. C++에서는 함수 내에서 전역 변수의 위치를 ​​제공할 수 없기 때문에 전역 변수를 동적 변수로 선언해야 합니다.

포인터 표기법 활용 대형 구조의 경우 포인터를 통해 반환하면 데이터로 효과적으로 검색할 수 있습니다. 2D 배열은 상대적으로 커지므로 다음 예에서 볼 수 있듯이 행렬의 초기 구성 요소에 대한 포인터를 제공하는 것이 좋습니다. UpdatedArr의 2D 배열 인수는 arr[][SIZE] 형식으로 선언되어 작업 범위에서 대괄호를 사용하여 구성 요소를 검색합니다.

C++ 2차원 배열 함수 리턴 - c++ 2chawon baeyeol hamsu liteon

프로그램을 시작할 때 3개의 헤더 파일을 도입해야 합니다. 입력 및 출력 기능에 사용됩니다. 동일한 데이터 유형의 구성요소를 보유하기 위해 포함됩니다. 프로그램의 결과를 운영하는 데 사용됩니다.

그 후, 우리는 표준 함수 'cout'를 출력 목적으로, 'cin'을 입력 목적으로, 'endl'을 다음 줄에, 'string'을 문자열 선언에, 'vector'를 사용합니다. 런타임 중에 치수를 수정할 수 있는 배열을 나타내는 컨테이너와 출력의 너비를 지정하는 'setw' 함수를 제공합니다. 절차.

이제 배열의 크기를 설정하고 변수 'SIZE'에 저장합니다. 그런 다음 업데이트된 배열에 대한 포인터가 초기화됩니다. 배열의 길이와 배열 크기는 'updatedArr()' 함수에 매개변수로 전달됩니다. 이제 'for' 루프를 사용합니다. 'for' 루프 내에서 루프 변수 'j'를 초기화합니다. 그런 다음 루프 변수의 값이 배열의 길이보다 작아야 한다는 조건을 정의합니다. 'for' 루프의 마지막 부분에는 'for' 루프의 변수 값이 증가합니다. 이 'for' 루프는 배열의 행에 적용됩니다.

같은 방식으로 배열의 열에 대해 구현된 또 다른 'for' 루프를 사용합니다. 이제 main() 함수를 호출합니다. 여기에서 배열을 정의합니다. 이 배열에는 4개의 행과 4개의 열이 있습니다. 'input array' 문을 출력하기 위해 'cout' 명령을 적용합니다.

C++ 2차원 배열 함수 리턴 - c++ 2chawon baeyeol hamsu liteon

이 외에도 입력 배열에 'for' 루프를 적용합니다. 첫 번째 'cout'는 '['를 인쇄한 다음 for 루프를 사용하여 배열의 요소를 선언합니다. 여기에서 setw() 함수를 정의합니다. 출력 프로세스에 적용되는 필드 너비를 지정합니다. 배열의 끝 괄호 ']'를 인쇄하기 위해 'cout'를 사용했습니다.

또한 다음 줄에 대해 'endl'을 획득합니다. 이제 업데이트된 배열에 대한 포인터 '*pt'를 선언합니다. 여기서 우리는 updatedArr()에 대한 인수로 크기와 입력 배열을 제공했습니다. 다음 줄에서는 'updated array' 문을 표시하기 위해 'cout'가 적용됩니다. 배열의 행에 대해 'for' 루프를 사용합니다.

먼저 변수 'j'를 초기화한 다음 조건 'j'를 설정합니다.

C++ 2차원 배열 함수 리턴 - c++ 2chawon baeyeol hamsu liteon

포인터 대 포인터 기술 활용

함수 내에서 배열을 검색하려면 포인터 프로시저에 대한 포인터를 사용합니다. 검색할 엔터티가 동적으로 생성되는 경우 이 접근 방식은 다른 모든 것에 비해 상당한 이점을 제공합니다. 포인터가 연산자 범위에서 수신되면 일반적으로 개체 액세스 가능 조건을 업데이트하는 것이 좋습니다. 요소를 표시하기 전에 배열 참조를 int*로 변환한다는 점에 유의하는 것이 중요합니다.

C++ 2차원 배열 함수 리턴 - c++ 2chawon baeyeol hamsu liteon

우선 3개의 중요한 라이브러리를 통합할 것입니다. 헤더 파일 입력 및 출력 절차에 사용할 수 있습니다. 동일한 데이터 유형의 구성 요소를 유지하는 데 사용됩니다. 배열과 달리 벡터의 차원은 지속적으로 증가할 수 있습니다. 프로그램을 구현하는 동안 필요에 맞게 벡터의 크기를 조정할 것입니다. 프로그램의 응답을 평가하는 데 사용됩니다.

그 후 우리는 출력에 'cout', 입력에 'cin', 다음 줄에 'endl', 정의에 'string'과 같은 표준 함수를 사용했습니다. 문자열, 실행 중에 속성을 변경할 수 있는 배열을 나타내는 '벡터', 출력의 너비를 지정하는 'setw' 프로세스. 이제 배열의 크기를 조정하고 'SIZE' 변수에 저장합니다. 그러면 업데이트된 배열의 포인터가 초기화됩니다. 배열의 크기와 길이는 'updatedArr()' 메서드에 대한 인수로 제공됩니다. 'for' 루프가 사용되었습니다.

그런 다음 루프 변수의 값이 배열의 길이보다 작아야 한다는 요구 사항을 지정합니다. 'for' 루프 변수의 값은 루프의 마지막 부분 내에서 증가합니다. 이 'for' 루프는 배열의 행에 대해 실행됩니다. 같은 방식으로 'for' 루프가 하나 더 사용됩니다. 해당 'for' 루프는 배열의 열에 대해 실행됩니다. 이제 main() 함수를 정의합니다. 배열의 요소는 여기에 지정됩니다. 이 배열에는 4개의 열과 4개의 행이 있습니다.

C++ 2차원 배열 함수 리턴 - c++ 2chawon baeyeol hamsu liteon

'input array' 문은 'cout' 명령을 사용하여 표시됩니다. 또한 입력 배열은 'for' 루프로 처리됩니다. 초기 'cout'는 '['를 출력하고 그 후에 for 루프는 배열의 요소를 주장합니다. 여기서 setw() 함수를 표현할 수 있습니다. setw() 메서드는 변수의 너비를 조정하기 위한 C++ 연산자입니다. 연산자는 구성 요소에 필요한 문자 집합의 최소 범위를 제공하거나 ios 라이브러리 가변 너비를 변경합니다. 이 방법을 사용하면 출력 절차에 대한 샘플 너비를 사용자 지정할 수 있습니다.

배열의 닫는 대괄호 ']'를 표시하기 위해 'cout' 명령을 사용했습니다. 다음 줄에도 'endl'을 적용합니다. 업데이트된 배열의 경우 이제 포인터 '**pt2'를 정의합니다. updatedArr() 함수의 매개변수로 크기와 입력 배열을 지정했습니다. 우리는 '업데이트된 배열' 구문을 표시하기 위해 'cout'를 사용합니다. 우리는 조건 'j

유사한 'for' 루프가 배열의 열에 사용됩니다. 그런 다음 setw() 함수가 적용됩니다. 마지막으로 'return EXIT_SUCESS' 명령으로 프로그램을 종료합니다.

C++ 2차원 배열 함수 리턴 - c++ 2chawon baeyeol hamsu liteon

결론 이 기사에서는 포인터 표기법과 함수에서 2차원 배열을 반환하는 포인터에 대한 포인터 접근이라는 두 가지 방법에 대해 논의했습니다. 전체 배열을 매개변수로 반환하는 것은 C++에서 지원되지 않습니다. 함수에서 배열을 반환하는 방법은 다른 차원을 통합하는 방법에 따라 결정됩니다.


함수에서 2차원 배열을 매개변수로 사용하려면 ( ) (괄호) 안에서 매개변수 이름 뒤에 [ ][가로크기] (대괄호)를 두 개 붙이고 가로 크기를 지정하거나 괄호로 묶은 포인터 뒤에 [ ]를 붙이고 가로 크기를 지정합니다.

반환값자료형 함수이름(자료형 매개변수[][가로크기])
{
}

반환값자료형 함수이름(자료형 (*매개변수)[가로크기])
{
}

다음 내용을 소스 코드 편집 창에 입력한 뒤 실행해보세요.

parameter_two_dimensional_array.c

#include <stdio.h>

//                          ↓ 배열의 가로 크기 지정
void print2DArray(int arr[][5], int col, int row)    // 2차원 배열의 포인터와 가로, 세로 크기를 받음
{
    for (int i = 0; i < row; i++)
    {
        for (int j = 0; j < col; j++)
        {
            printf("%d ", arr[i][j]);
        }

        printf("\n");
    }
}

int main()
{
    int numArr[2][5] = {
        { 1, 2, 3, 4, 5 },
        { 6, 7, 8, 9, 10 }
    };

    int col = sizeof(numArr[0]) / sizeof(int);      // 5: 2차원 배열의 가로 크기를 구할 때는 
                                                    // 가로 한 줄을 요소의 크기로 나눠줌

    int row = sizeof(numArr) / sizeof(numArr[0]);   // 2: 2차원 배열의 세로 크기를 구할 때는 
                                       // 배열이 차지하는 공간을 가로 한 줄의 크기로 나눠줌

    print2DArray(numArr, col, row);    // 2차원 배열과 가로, 세로 크기를 넣음

    return 0;
}

실행 결과

1 2 3 4 5
6 7 8 9 10

함수에서 2차원 배열을 매개변수로 사용할 때는 매개변수 이름 뒤에 []를 두 개 붙이고 두 번째 대괄호에는 배열의 가로 크기를 지정해야 합니다(첫 번째 대괄호 안에는 세로 크기를 지정하더라도 무시됩니다). 즉, arr[][5]는 2차원 배열의 메모리 주소를 담고 있는 포인터이며 2차원 배열의 실제 크기를 알 수 없으므로 다른 매개변수로 배열의 가로, 세로 크기를 받아야 합니다.

void print2DArray(int arr[][5], int col, int row)    // 2차원 배열의 포인터와 가로, 세로 크기를 받음

print2DArray를 사용할 때는 2차원 배열과 가로, 세로 크기를 넣습니다. 여기서 가로 크기를 구할 때는 가로 한 줄을 요소(자료형)의 크기로 나누면 되고, 세로 크기를 구할 때는 배열이 차지하는 공간을 가로 한 줄의 크기로 나눠주면 됩니다.

int numArr[2][5] = {
    { 1, 2, 3, 4, 5 },
    { 6, 7, 8, 9, 10 }
};

int col = sizeof(numArr[0]) / sizeof(int);      // 5: 2차원 배열의 가로 크기를 구할 때는 
                                                // 가로 한 줄을 요소의 크기로 나눠줌

int row = sizeof(numArr) / sizeof(numArr[0]);   // 2: 2차원 배열의 세로 크기를 구할 때는 
                                   // 배열이 차지하는 공간을 가로 한 줄의 크기로 나눠줌

print2DArray(numArr, col, row);    // 2차원 배열과 가로, 세로 크기를 넣음

print2DArray 안에서는 매개변수 arrcol, row를 사용하여 2차원 배열의 요소를 출력할 수 있습니다.

void print2DArray(int arr[][4], int col, int row)    // 2차원 배열의 포인터와 가로, 세로 크기를 받음
{
    for (int i = 0; i < row; i++)
    {
        for (int j = 0; j < col; j++)
        {
            printf("%d ", arr[i][j]);
        }

        printf("\n");
    }
}

arr도 포인터이므로 함수 안에서 2차원 배열의 요소를 변경하면 함수 바깥에 있는 2차원 배열의 요소가 바뀌겠죠?

2차원 배열을 매개변수로 사용할 때는 포인터와 대괄호를 사용할 수도 있습니다.

parameter_two_dimensional_pointer_array.c

#include <stdio.h>

void print2DArray(int (*arr)[5], int col, int row)   // 매개변수를 포인터로 만든 뒤 가로 크기 지정
{
    for (int i = 0; i < row; i++)
    {
        for (int j = 0; j < col; j++)
        {
            printf("%d ", arr[i][j]);
        }

        printf("\n");
    }
}

int main()
{
    int numArr[2][5] = {
        { 1, 2, 3, 4, 5 },
        { 6, 7, 8, 9, 10 }
    };

    int col = sizeof(numArr[0]) / sizeof(int);      // 5: 2차원 배열의 가로 크기를 구할 때는 
                                                    // 가로 한 줄을 요소의 크기로 나눠줌

    int row = sizeof(numArr) / sizeof(numArr[0]);    // 2: 2차원 배열의 세로 크기를 구할 때는 
                                       // 배열이 차지하는 공간을 가로 한 줄의 크기로 나눠줌

    print2DArray(numArr, col, row);    // 2차원 배열과 가로, 세로 크기를 넣음

    return 0;
}

실행 결과

1 2 3 4 5
6 7 8 9 10

int (*arr)[5]와 같이 int형 배열의 포인터로 지정하면 2차원 배열을 매개변수로 사용할 수 있습니다. 또한, 대괄호를 두 개 붙일 때와 마찬가지로 대괄호 안에는 2차원 배열의 가로 크기를 지정합니다. 여기서 주의할 점은 (*arr)[5]와 같이 포인터를 괄호로 묶어서 배열의 포인터라는 점을 명확하게 표시해야 합니다. 그리고 포인터로는 2차원 배열의 크기를 알 수 없으므로 다른 매개변수를 통해 배열의 가로, 세로 크기를 받습니다.

void print2DArray(int (*arr)[5], int col, int row)    // 매개변수를 포인터로 만든 뒤 가로 크기 지정

참고 | 복합 리터럴 사용하기(2차원 배열)

복합 리터럴을 사용하면 2차원 배열도 함수에 넘겨줄 수 있습니다.

  • (자료형)[][가로크기] { { 값1, 값2, 값3 }, { 값4, 값5, 값6 } }
  • (자료형)[세로크기][가로크기] { { 값1, 값2, 값3 }, { 값4, 값5, 값6 } }

compound_literal_two_dimensional_array.c

#include <stdio.h>

void print2DArray(int (*arr)[5], int col, int row)
{
    for (int i = 0; i < row; i++)
    {
        for (int j = 0; j < col; j++)
        {
            printf("%d ", arr[i][j]);
        }

        printf("\n");
    }
}

int main()
{
    // 복합 리터럴 방식으로 2차원 배열을 넘겨줌
    print2DArray((int[2][5]) { { 1, 2, 3, 4, 5 }, { 6, 7, 8, 9, 10 } }, 5, 2);

    return 0;
}

지금까지 함수에서 배열 매개변수를 사용하는 방법을 배웠는데 실제로 함수에 배열을 전달하는 것은 생각보다 까다롭습니다. 당장은 문법과 개념을 모두 이해하지 않아도 됩니다. 나중에 함수에서 배열을 전달해야 된다면 다시 돌아와서 찾아보면 됩니다.