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