[방법 1] 2차원 배열을 선언할 때 배열의 크기를 지정해준다.
int arr[2][3]; // 가로 3,세로 2인 2차원배열이 할당된다.
* 배열을 선언할 때 가로 세로의 길이를 변수를 사용하여 지정하는 것은 불가능 하다.
그래서 malloc()으로 동적 할당을 받아야한다.
int a=2; int b=3;
int arr[a][b] ; //불가능
[방법 2] malloc( )으로 2차원 배열 공간을 동적 할당한다.
(1) malloc으로 2차원 배열 만들기
: malloc( ) 을 여러번 호출
이 방법은 할당과 해제가 번거롭다.
/*2차원 배열 동적할당*/
int width=2;
int height=3;
int** arr= (int**)malloc((sizeof(int*)*height);
for(int i=0;i<height;i++)
arr[i] = (int*) malloc(sizeof(int) * width);
/*할당한 공간 해제*/
for(int i=0; i<height; i++){
free(arr[i]);
}
free(arr);
//height+1번의 해제를 해줘야한다.
(2) 해제를 두 번만 하는 malloc 2차원 배열
<핵심 아이디어>
배열의 크기를 한번에 할당 받는다.
int ** arr = (int**) malloc(sizeof(int*)*a);
arr[0] = (int*) malloc(sizeof(int)*a*b);
for(int =1;i<a;i++)
arr[i]=arr[i-1]+b;
free(arr[0]);
free(arr);
/*2차원 배열 동적 할당*/
int width=2;
int height=3;
int ** arr = (int**)malloc(sizeof(int*)*height);
arr[0]= (int *) malloc(sizeof(int)*height*width);
for(int i=1;i<height;i++)
arr[i] = arr[i-1]+width;
/*2차원 배열 해제*/
free(arr[0]);
free(arr);
'◼️C' 카테고리의 다른 글
[C] 구조체 배열에 색상 스펙트럼을 설정하기 (0) | 2024.03.11 |
---|---|
[C] fgets, fscanf 차이 (0) | 2023.12.27 |
C언어 소수점의 자릿수 구하기 (0) | 2023.03.06 |