정수를 입력받아 가변적으로 배열을 사용하는 방법
배열 선언이 아닌 포인터를 선언하여 malloc()으로 메모리를 할당하는 방법이다.
자료형 포인터이름 = malloc(sizefo(자료형) 크기);
int numPtr = malloc(sizeof(char) input);
포인터를 공부할때 내용물을 가져오려면 "포인터명" 처럼 을 이용해 역참조해야 했다.
하지만, 배열처럼 선언 후 인덱스로 값을 가져올 때는 *을 생략할 수 있다.
numPtr[0] = 10;
printf("%d\n", numPtr[0]);
선언
int main()
{
int **m = malloc(sizeof(int *) * (세로));
// sizeof(int *)을 하는 이유:
// 2차원 포인트 배열은 세로에 배열이 들어가는것이 아닌
// 가로배열을 참조하는 포인터가 들어가기 때문에 세로의 요소 당 크기는 int*(int포인터)크기여야 한다.
for(int i=0; i<(세로); ㅑ++)
{
m[i] = malloc(sizeof(int) * (가로));
}
해제(free)
for (int i=0; i<(세로); i++)
{
free(m[i]); 가로를 먼저 해제하고 세로를 해제해야
// 할당한 모든 메모리를 해제할 수 있다.
}
free(m);
가로를 먼저 해제하지 않고 세로를 먼저 해제하면 가로의 주소를 잃어버리기 떄문에 해제할 수 없다.
선언: 세로 -> 가로
해제: 가로 -> 세로
조립은 분해의 역순과 같은 원리