지난 글에서 2차원 배열은 구현이 쉬우나,
메모리 낭비가 크다는 단점이 있다고 말씀드렸습니다.
다행히도 2차원 포인터로 구현한 2차원 배열로 해결 가능합니다!
메모리 구조를 생각하며 그리게 된다면 아래처럼 그릴 수 있습니다.
잠깐! 위의 프로세스 메모리 구조를 모른다면 아래의 링크를 참고하세요!
프로세스 메모리 구조와 포인터 변수에 대한 글
2차원 포인터부터 설명드리겠습니다.
1. 1차원 포인터 변수는 일반적인 변수의 주소를 저장 가능 합니다!
int a =5;
int* p = &a;
2. 2차원 포인터 변수는 1차원 포인터 변수의 주소를 저장 가능 합니다!
Ex)
int a=5;
int *p1 = &a;
Int **p2 = &p1;
이러한 원리로!
2차원 포인터를 이용한 2차원 배열 구현을 할 수 있는데요!
참 쉽죠?
자 문제입니다!
아래 그림과 똑같은
2차원 포인터로 구현한 2차원 배열을 만들어보세요!
(동적할당과 동적해제까지)
정답
#include<stdio.h>
#include<stdlib.h>
int main()
{
int** p = (int**)malloc(sizeof(int*)*6);
p[0] = (int*)malloc(sizeof(int) * 2);
p[1] = (int*)malloc(sizeof(int) * 4);
p[2] = (int*)malloc(sizeof(int) * 3);
p[3] = (int*)malloc(sizeof(int) * 6);
p[4] = (int*)malloc(sizeof(int) * 3);
p[5] = (int*)malloc(sizeof(int) * 3);
for (int i = 0; i < 6; i++)
{
free(p[i]);
}
free(p);
}
이 글은 Medium 개인 블로그에도 게시했습니다