Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 함수에 2차원 배열 전달하는 방법 총정리

C++에서는 배열 전체를 함수의 인수로 직접 전달할 수 없습니다. 다만, 인덱스를 생략한 배열 이름을 지정하면 배열에 대한 포인터를 전달할 수 있습니다. 2차원 배열을 함수에 전달하는 방법은 크게 세 가지가 있으며, 각각의 방법과 특징을 아래에서 자세히 살펴보겠습니다.

방법 1. 2차원 배열의 열 크기 지정하기

함수 매개변수에서 행(row) 크기는 생략할 수 있지만, 열(column) 크기는 반드시 명시해야 합니다. 컴파일러가 배열 요소의 메모리 위치를 계산하려면 열 크기 정보가 필요하기 때문입니다.

void processArr(int a[][10]) {
    // 원하는 작업 수행
}

방법 2. 포인터 배열 전달하기

각 행이 int형 포인터로 구성된 배열을 전달하는 방식입니다. 호출 시점에 각 행을 동적으로 할당하여 넘겨줄 수 있습니다.

void processArr(int *a[10]) {
    // 원하는 작업 수행
}

// 호출 시
int *array[10];
for(int i = 0; i < 10; i++)
    array[i] = new int[10];
processArr(array);

방법 3. 이중 포인터(포인터의 포인터) 전달하기

가장 유연한 방법으로, 완전히 동적으로 할당된 2차원 배열을 전달할 때 사용합니다. 배열 크기를 런타임에 결정해야 하는 경우에 특히 유용합니다.

void processArr(int **a) {
    // 원하는 작업 수행
}

// 호출 시
int **array;
array = new int *[10];
for(int i = 0; i < 10; i++)
    array[i] = new int[10];
processArr(array);

실제 동작 예제

아래 예제는 첫 번째 방법(열 크기 지정)을 활용해 2차원 배열을 함수에 전달하고, 특정 위치의 요소 값을 출력하는 코드입니다.

#include<iostream>
using namespace std;

void processArr(int a[][2]) {
    cout << "element at index 1,1 is " << a[1][1];
}
int main() {
    int arr[2][2];
    arr[0][0] = 0;
    arr[0][1] = 1;
    arr[1][0] = 2;
    arr[1][1] = 3;

    processArr(arr);
    return 0;
}

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

element at index 1,1 is 3

세 가지 방법 중 상황에 맞는 방식을 선택하면 됩니다. 배열 크기가 고정되어 있다면 첫 번째 방법이 가장 간단하고, 동적 할당이 필요하다면 두 번째 또는 세 번째 방법이 적합합니다.