728x90

만약 N(행), M(열)이 3x3이라면 위 2차원 배열과 같은 형태를 가질 것 입니다.

2차원 배열 정적할당
  int N, M;
    cin >> N;
    cin >> M;

    int arr[N][M] = {
        {2, 4, 5},
        {1, 2, 5}
    };

정적할당을 할때는 포인터를 사용하지 않고 선언이 가능합니다.

 

하지만 동적할당을 할때는 1차원 배열 동적할당과 마찬가지로 포인터를 사용하는데 

선언 방법이 조금 다릅니다.

 

2차원 배열 동적할당
    int** arr = new int*[N];
    for (int i = 0; i < N; ++i)
    {
        arr[i] = new int[M];
    }

1차원과 형태는 비슷하지만 보인터가 한개 더 있다는점과 자료형 옆에도 포인터가 붙는다는점,

 

그리고 반복문을 이용한다는 부분이 차이점으로 볼 수 있습니다.

 

위에서 N은 행 M은 열이 됩니다.

 

2차원 배열 할당 메모리 해제
    for (int i = 0; i < N; ++i)
    {
        delete[] arr[i];
    }
    delete[] arr;

1차원 배열 할당 메모리에서는 delete[] arr와 같이 한줄로 메모리 해제를 했지만

 

위 동적할당과 마찬가지로 반복문을 이용해서 메모리 해제를 해야합니다.

 

728x90

+ Recent posts