38.2 입력한 크기만큼 메모리를 할당하여 배열처럼 사용하기
이번에는 사용자가 입력한 크기만큼 메모리를 할당하여 배열처럼 사용해보겠습니다.
pointer_scanf_like_array.c
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> // malloc, free 함수가 선언된 헤더 파일 int main() { int size; scanf("%d", &size); int *numPtr = malloc(sizeof(int) * size); // (int 크기 * 입력받은 크기)만큼 동적 메모리 할당 for (int i = 0; i < size; i++) // 입력받은 크기만큼 반복 { numPtr[i] = i; // 인덱스로 접근하여 값 할당 } for (int i = 0; i < size; i++) // 입력받은 크기만큼 반복 { printf("%d\n", numPtr[i]); // 인덱스로 접근하여 값 출력 } free(numPtr); // 동적으로 할당한 메모리 해제 return 0; }
소스를 컴파일하여 실행한 뒤 5를 입력하고 엔터 키를 누르세요.
실행 결과
5 (입력) 0 1 2 3 4 ↑ 5를 입력했으므로 0부터 4까지 값이 들어갔음
scanf로 크기를 입력받았습니다. 그리고 int 크기에 입력받은 크기를 곱하여 메모리를 할당합니다.
scanf("%d", &size); int *numPtr = malloc(sizeof(int) * size); // (int 크기 * 입력받은 크기)만큼 동적 메모리 할당
메모리가 준비되었으면 입력받은 크기만큼 반복하면서 값을 할당하고, 다시 입력받은 크기만큼 반복하면서 값을 출력합니다. 배열과 마찬가지로 값을 할당하거나 출력할 때는 [ ]를 사용하여 인덱스로 접근하면 됩니다.
for (int i = 0; i < size; i++) // 입력받은 크기만큼 반복 { numPtr[i] = i; // 인덱스로 접근하여 값 할당 } for (int i = 0; i < size; i++) // 입력받은 크기만큼 반복 { printf("%d\n", numPtr[i]); // 인덱스로 접근하여 값 출력 }
사용이 끝났으면 반드시 free 함수로 할당한 메모리를 해제합니다.
free(numPtr); // 동적으로 할당한 메모리 해제
지금까지 포인터에 메모리를 할당하여 1차원 배열처럼 사용해보았습니다. 그럼 2차원 배열은 포인터로 어떻게 사용할 수 있을까요?