56. C++ 상수 포인터 vs 포인터 상수

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의 위치는 포인터가 어떤 요소를 상수화하는지 결정하는 핵심 문법입니다. 상수 포인터와 포인터 상수를 명확히 구분하면 함수 인자 설계, 메모리 보호, 코드 명확성 향상에 유리하며, 포인터의 사용 의도를 분명하게 표현할 수 있습니다.

댓글 달기

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

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