C++ 배열과 포인터 관계

C++에서 배열과 포인터는 기술적으로 밀접하게 연관된 관계이다.

배열의 이름이 메모리 주소를 가리키는 포인터로 동작한다는 점을 바탕으로 메모리 구조를 분석했다.

배열의 이름에 숨겨진 비밀

우리가 흔히 쓰는 int arr[5];에서 arr이라는 이름은 배열의 첫 번째 요소(&arr[0])를 가리키는 포인터와 같다.

  • 주소값의 일치: arr&arr[0]은 정확히 같은 주소값을 가진다.
    배열의 이름 자체가 시작 주소를 나타내기 때문이다.

  • 포인터 연산: arr[i]라는 표현은 내부적으로 *(arr + i)로 처리된다.
    즉, 시작 주소에서 i만큼 떨어진 곳의 값을 가져오라는 명령이다.

  • 함수 전달: 배열을 함수 인자로 넘기면 배열 전체가 복사되는 것이 아니라, 시작 주소(포인터)만 전달된다.
    함수 안에서는 배열의 크기를 알 수 없으므로 크기 정보를 별도로 넘겨주는 것이 필수적이다.

동적 배열과 포인터

런타임에 크기가 결정되는 배열이 필요할 때는 new[]를 사용한다.

이때 반환되는 값은 포인터이며, 이를 통해 가변적인 데이터를 관리할 수 있다.

사용이 끝난 후 delete[]로 자원을 해제해야 한다.

메모리 직접 제어

배열 인덱스 접근이 내부적으로 포인터 덧셈으로 처리된다는 점은 중요하다.

메모리 공간을 연속적으로 사용하는 배열의 효율성과 이를 가리키는 포인터의 유연함을 이해하면 C++의 성능상 강점을 파악할 수 있는 것 같다.

Author avatar

웨이호프

WordPress creator and blogger.

View all posts