배열과 포인터의 기억공간 확보

배열의 기억공간 확보

  • 배열은 고정적인 기억공간을 확보한다.
  • 배열은 선언 시점에 필요한 저장공간이 한 번에 할당된다.
  • 예를 들어 int A[5]는 프로그램 시작 시점에 이미 5개의 int 공간이 고정 크기로 확보된다.
  • 따라서 배열은 크기가 변하지 않으며, 미리 정해진 공간을 그대로 사용한다.

포인터의 기억공간 확보

  • 포인터 자체는 주소를 저장할 뿐이다.
  • 여기에 malloc 같은 동적 메모리 할당을 사용하면 기억공간을 유동적으로 확보할 수 있다.
  • 필요할 때만 자료용 기억 공간을 확보할 수 있으므로, 자료의 개수가 가변적인 경우 유용하다.

포인터가 배열에 비해 다양한 용도로 활용하기 더 적합함

예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <stdlib.h>

int main() {
    int arr[5] = {1, 2, 3, 4, 5};        // 배열은 크기가 고정된다
    int *pt = NULL;                      // 포인터는 주소만 저장한다
    int n = 3;                           // 필요한 자료 개수를 입력받았다고 가정한다

    pt = (int*)malloc(sizeof(int) * n);  // 필요한 만큼만 동적으로 공간을 확보한다
    pt[0] = 10;
    pt[1] = 20;
    pt[2] = 30;

    printf("arr[0] = %d\n", arr[0]);     // 고정 배열 출력이다
    printf("pt[0] = %d\n", pt[0]);       // 동적 메모리 출력이다

    free(pt);                            // 동적 메모리는 반드시 해제한다
    return 0;
}

Reference

C 프로그래밍 (김형근, 곽덕훈, 정재화 공저)
C 프로그래밍 강의 (방송통신대 - 이병래)

Comments