58. C++ 포인터와 배열 관계

58. C++ 포인터와 배열 관계

1. 개요

1.1 문서 개요

이 문서는 C++에서 포인터와 배열 간의 관계를 설명합니다. 배열 이름은 내부적으로 포인터처럼 해석되며, 포인터 연산을 통해 배열 요소에 접근할 수 있습니다. 포인터와 배열의 차이점 및 유사성을 명확히 파악하면, 메모리 처리 및 함수 인자 전달에 유용하게 사용할 수 있습니다.

2. 내용

2.1 배열과 포인터의 유사성

2.1.1 배열 이름의 포인터 해석

int arr[5] = {1, 2, 3, 4, 5};
int* p = arr;
std::cout << *(p + 2); // 3 출력

arr은 배열의 첫 번째 요소를 가리키는 포인터처럼 해석됩니다.

2.1.2 인덱싱과 포인터 연산

arr[2] == *(arr + 2)
p[2] == *(p + 2)

2.2 배열과 포인터의 차이점

항목 배열 포인터
메모리 할당 컴파일 타임 런타임
크기 변경 불가능 가능 (동적 할당)
주소 변경 불가능 가능

2.3 함수 인자로 전달 시의 차이

배열을 함수에 전달하면 포인터로 자동 변환됩니다.

void print(int arr[]) {
    std::cout << arr[0];
}

실제로는 void print(int* arr)와 동일하게 작동합니다.

3. 마무리

포인터와 배열은 C++에서 매우 밀접한 관계를 가지며, 배열은 포인터처럼 동작하지만 메모리 관리나 주소 처리에서 차이를 보입니다. 이러한 차이를 정확히 이해하면 함수 인자 처리, 동적 메모리 제어, 연산 효율성 확보에 효과적으로 적용할 수 있습니다.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

error: Content is protected !!
위로 스크롤