C언어에서 배열의 경우 사전에 적절한 크기만큼 할당해주어야 한다.
원하는 만큼만 메모리를 할당해서 사용하고자 한다면 프로그램 실행 도중에 메모리를 할당하는 방법인 동적 메모리 할당을 사용한다.
동적으로 할당된 변수는 힙 영역에 저장된다.
malloc() 함수를 이용해 원하는 만큼의 메모리 공간을 확보할 수 있다.malloc() 함수는 메모리 할당에 성공하면 주소를 반환하고, 그렇지 않으면 NULL을 반환한다.malloc() 함수는 <stdlib.h> 라이브러리에 정의되어 있다.free() 함수로 메모리 해제를 해주어야 메모리 내의 프로세스 무게가 더해져 오류가 발생하지 않는다.memset() 을 사용한다.memset(포인터, 값, 표기);memset() 함수는 <string.h> 라이브러리에 정의되어있다.#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
char *a = malloc(100);
memset(a, 'A', 100);
for(int i = 0 ; i < 100 ; i++) {
printf("%c ", a[i]); // A 100번 출력
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int** p = (int**)malloc(sizeof(int*) * 3); // int** p로 이차원 배열을 만들어주고 3행을 만들어준다.
for(int i = 0 ; i < 3 ; i++) {
*(p+1) = (int*)malloc(sizeof(int) * 3); // 3열을 만들어 준다.
}
for(int i = 0 ; i < 3 ; i++) {
for(int j = 0 ; j < 3 ; j++) {
*(*p+i)+j) = i*3+j;
printf("%d ", *(*p+i)+j);
}
printf("\n");
}
}
/*
0 1 2
3 4 5
6 7 8
*/
배열의 사이즈를 미리 정하지 않아도 된다는 점에서 좋은 것 같다. (JavaScript는 원래 없지만..)
아직도 포인터랑 이차원 배열 함께 쓰는 것은 어렵지만 어려우면 다시 보고 또 다시 보고 이해하는 수밖에 없지 않을까 하는 생각이 든다.