반응형
동적할당
코드를 작성하면서 최적화라던지 여러가지 이유로 런타임에 배열의 크기를 결정해야 할 때가 있습니다.
그럴 때 동적할당을 하게 되는데, C++에서 1차원배열인 경우와 2차원배열은 경우의 작성 코드에 차이가 있어서 한번 소개해 보려고 합니다.
예제
<1차원 배열>
우선 크기가 5인 일차원 배열을 선언하는 경우의 코드입니다.
int* arr = new int[5]; //크기가 5인 일차원 배열 동적할당
일차원 배열의 경우에는 그냥 간단히 new 키워드를 이용해서 위와 같이 선언하면 됩니다.
2차원 배열의 경우에는 살짝 다릅니다.
<2차원 배열>
2차원 배열의 경우에는 2중 포인터를 사용합니다.
아래의 그림을 보면 좀 더 잘 이해할 수 있을 것입니다. 아래의 그림은 3X4 이차원 배열입니다.
arr의 각각의 인덱스들이 일차원 배열을 가르키고 있는 형태입니다.
아래와 같은 형태로 2차원 배열을 동적할당 할 수 있습니다.
int** arr = new int*[row]; //선언하고자 하는 이차원 배열의 행의 수 만큼 동적 할당
for(int i = 0; i < row; i++) //각각의 인덱스에 선언하고자 하는 배열의 크기만큼을 가르키게 함.
arr[i] = new int[col];
위의 코드와 같은 형태로 3X4 배열을 동적할당하는 코드를 작성해보겠습니다.
실제 코드를 작성할 때는 런타임에 row와 col 변수에 변수를 입력 받아서, 대입하면 됩니다.
int** arr = new int*[3]; //행의 크기가 3인 이차원 배열
for(int i=0; i<3; i++) //각각의 행에 길이가 4인 배열을 할당
arr[i] = new int[4];
2차원 배열 할당 해제
그렇다면 할당한 2차원 배열을 할당 해제하는 방법을 알아보겠습니다.
일반적으로는 반복문을 사용해서 할당을 해제합니다. 3X4 배열을 할당하고, 할당을 해제하는 코드를 보여드리겠습니다. 아래 코드를 보면 쉽게 이해할 수 있을 것입니다.
/******3x4 이차원 배열 할당******/
int** arr = new int*[3];
for(int i=0; i<3; i++)
arr[i] = new int[4];
/*****************************/
/**********할당 해제***********/
for(int i=0; i<3; i++)
delete[] arr[i];
delete[] arr;
/*****************************/
가벼운 마음으로 C++에서 2차원 배열을 어떻게 동적할당을 하는지 알아봤습니다.
반응형
'컴퓨터 > C\C++' 카테고리의 다른 글
[C++ STL]pair 클래스 사용방법 (0) | 2021.06.05 |
---|---|
[c언어/c++] isdigit 함수(숫자를 판별하는 함수) (0) | 2021.05.15 |
[C++]1-1.상속(Inheritance)[feat. 급여관리] (0) | 2021.05.07 |
C/C++ : static 선언에 대하여 (0) | 2021.03.02 |