더북(TheBook)

1.8.2 포인터

포인터는 메모리 주소를 포함하는 변수다. 이 주소는 주소 연산자(예를 들어 &x) 또는 동적으로 할당한 메모리로 얻을 수 있는 다른 변수의 주소일 수 있다. 먼저 후자인 동적인 크기의 배열을 할당하는 것부터 시작해 보자.

int* y = new int[10];

이 배열은 int 타입 요소가 10개인 배열을 할당한다. 동적 할당을 통해 런타임에 배열의 크기를 정할 수 있다. 이전 절에 있던 벡터 읽기 예제를 구현할 수도 있다.

ifstream ifs("some_array.dat");
int size;
ifs >> size;
float* v = new float[size];
for (int i = 0; i < size; ++i)
    ifs >> v[i];

포인터는 배열과 같은 위험이 있다. 범위를 벗어난 데이터에 접근하면 프로그램에 충돌이 발생하거나 데이터가 무효화 될 수 있다. 동적으로 할당한 배열을 처리할 때 배열 크기를 저장하는 것은 전적으로 프로그래머의 책임이다.

또한, 프로그래머는 더 이상 필요하지 않을 때 메모리를 해제해야 할 책임이 있다. 이는 다음 코드를 통해 수행한다.

delete[] v;
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.