[이차원배열의 동적할당]
1차원 배열의 동적할당은 단일 포인터에 주소 저장
2차원 배열의 동적할당은
포인터1 = 1차원 배열 할당
포인터2 = 1차원 배열 할당
..
- 1차원 배열을 할당받는 포인터를 요소로 갖는 포인터배열이 필요하다.
- 포인터 배열을 만들기 위해, 이중포인터에 동적할당을 한다.
#include <stdio.h>
#include <stdlib.h>
int main() {
int ar[3][4] = {
{1,2,3,4},
{5,6,7,8},
{9,10,11,12}
};
int **dbpar = NULL;
int pcount;//포인터개수
int xcount;//변수의개수
printf("묶음의 개수:");
scanf("%d", &pcount);
dbpar = (int**)malloc(sizeof(int*) * pcount);
printf("각묶음의 요소개수:");
scanf("%d", &xcount);
for (int i = 0; i < pcount; i++) {
dbpar[i] = (int *)malloc(sizeof(int)*xcount);
}
int value = 1;
for (int j = 0; j < pcount; j++) {
for (int i = 0; i < xcount; i++) {
dbpar[j][i] = value++;
}
}
for (int j = 0; j < pcount; j++) {
for (int i = 0; i < xcount; i++) {
printf("%d ", dbpar[j][i]);
}
printf("\n");
}
for (int i = 0; i < pcount; i++) {
free(dbpar[i]);
}
free(dbpar);
return 0;
}
1) 이중포인터에 동적할당
이중포인터 = malloc(sizeof(포인터)*개수);
2) 각각의 포인터에 1차원배열 크기만큼 동적할당
이중포인터[0] = malloc(sizeof(자료형)*개수);
이중포인터[1] = malloc(sizeof(자료형)*개수);
...
이중포인터[개수-1] = malloc(sizeof(자료형)*개수);
3) 각각의 포인터에 동적할당한 메모리 해제
4) 이중포인터에 동적할당한 메모리 해제
묶음의 개수:3 -> 포인터의 개수:3
갂묶음의 요소의 개수:4 -> 각포인터에 할당할 변수의 개수:4
이중포인터로 이차원 배열 생성가능
-> 이중포인터로 문자열배열 생성 가능