56. C++ 상수 포인터 vs 포인터 상수
1. 개요
1.1 문서 개요
이 문서는 C++에서 상수 포인터(const int*
)와 포인터 상수(int* const
)의 개념과 차이에 대해 설명합니다. 이 두 개념은 포인터 자체가 상수인지, 포인터가 가리키는 값이 상수인지를 구분하는 중요한 요소로, 포인터 사용 시 의미를 명확히 하여 코드의 안전성과 정확성을 높이는 데에 사용됩니다.
2. 내용
2.1 const의 위치에 따른 의미 변화
2.1.1 const int* ptr
— 상수 포인터
포인터가 가리키는 대상은 상수이며, 변경할 수 없습니다.
const int* ptr = &value;
*ptr = 20; // 오류: 상수 값을 변경할 수 없음
ptr = &otherValue; // 가능
2.1.2 int* const ptr
— 포인터 상수
포인터 자체가 상수이므로, 다른 주소를 가리키게 할 수 없습니다.
int value = 10;
int* const ptr = &value;
*ptr = 20; // 가능
ptr = &otherValue; // 오류: 상수 포인터 변수는 변경 불가
2.1.3 const int* const ptr
— 상수 포인터 상수
가리키는 대상도, 포인터 자체도 모두 변경이 불가능합니다.
const int* const ptr = &value;
*ptr = 20; // 오류
ptr = &otherValue; // 오류
2.2 const 포인터 조합 요약
선언 형태 | 가리키는 값 변경 가능 | 주소 변경 가능 |
---|---|---|
const int* ptr |
불가능 | 가능 |
int* const ptr |
가능 | 불가능 |
const int* const ptr |
불가능 | 불가능 |
3. 마무리
C++에서 const의 위치는 포인터가 어떤 요소를 상수화하는지 결정하는 핵심 문법입니다. 상수 포인터와 포인터 상수를 명확히 구분하면 함수 인자 설계, 메모리 보호, 코드 명확성 향상에 유리하며, 포인터의 사용 의도를 분명하게 표현할 수 있습니다.