본문 바로가기
프로그래밍/C

이차원배열의 동적할당

by leestun 2020. 8. 9.
반응형

[이차원배열의 동적할당]

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

이중포인터로 이차원 배열 생성가능
-> 이중포인터로 문자열배열 생성 가능

반응형

'프로그래밍 > C' 카테고리의 다른 글

구조체 포인터  (0) 2020.08.11
구조체  (0) 2020.08.10
동적메모리  (0) 2020.08.05
이중포인터  (0) 2020.08.04
포인터배열,배열포인터  (0) 2020.08.04