배열의 치명적인 약점 중의 하나는 사이즈를 조절할수 없다는것이다.
하지만, 동적 배열을 이용하면 이러한 약점을 극복할수 있다.
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;
}
#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);
}
▼ 2차원 배열 동적 할당하기