✅ 목표 (Goal)

배열의 치명적인 약점 중의 하나는 사이즈를 조절할수 없다는것이다.

하지만, 동적 배열을 이용하면 이러한 약점을 극복할수 있다.

1차원, 2차원 배열을 동적으로 만들어 보자.

✅ 배열 만들기 복습

특별히 어려운 내용은 없기 때문에 설명 생략

이 배열은 메모리의 어느 영역에 만들어지나?

스택? 힙

스택에 만들어진다!!

#include <stdio.h>
#include <stdlib.h> // malloc 함수를 호출하려면 include 해야 한다.

int main(void) {
	int arr1[] = {11,22,33}; // (1) 스택에 생성하는 방법
	for (int i = 0; i < sizeof(arr1)/sizeof(int); i++) {
		printf("%d, ", arr1[i]);
	}
	printf("\\r\\n");

	return 0;
}

✅ 1차원 배열을 동적으로 만든 예제

#include <stdio.h>
#include <stdlib.h> // malloc 함수때문에

int main(void) {

	// (1) 잘못된 코드
	// int*로 받아야 한다.
	//int arr[3] = (int*)malloc(sizeof(arr) / sizeof(int));
	//arr[0] = 1;
	//arr[1] = 2;
	//arr[2] = 3;

	// (2) 수정한 코드
	//int arr[3]을 int* arr로 바꾸면 잘 동작한다.
	// malloc으로 초기화시 쓰레기값을 가지므로 calloc을 사용하자.
	#define DEFAULT_SIZE (5)
	int* arr = (int*)calloc(DEFAULT_SIZE, sizeof(int));
	// arr을 NULL 체크 해주자.
	if (arr == NULL) { printf("malloc error"); return; }
	arr[0] = 11;
	arr[1] = 22;
	*(arr + 2) = 33; // 배열 연산, 포인터 연산 상관없다.
	*(arr + 3) = 44;

	for (int i = 0; i < DEFAULT_SIZE; i++) {
		printf("%d, ", arr[i]);
	}
	printf("\\r\\n");

	free(arr); // 잊지 말자

	return (0);
}

✅ 참조 (Ref.)

▼ 2차원 배열 동적 할당하기