2차원 포인터로 구현한 2차원 배열

JangDongyul·2022년 2월 10일
0

지난 글에서 2차원 배열은 구현이 쉬우나,
메모리 낭비가 크다는 단점이 있다고 말씀드렸습니다.

지난 글: 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 개인 블로그에도 게시했습니다

0개의 댓글