const pointer

const의 위치는 값이 잠기는지 주소가 잠기는지를 결정한다

포인터 선언을 읽을 때는 “가리키는 값”과 “포인터 변수의 주소값”을 나눠 봅니다. const가 대상 타입에 붙으면 값이 잠기고, 변수 이름 오른쪽에 붙으면 주소 재지정이 잠깁니다.

선언
의미
값 변경
주소 변경
const int* p
pointer to const
p가 가리키는 int 값을 p를 통해 바꿀 수 없습니다.
금지
가능
int* const p
const pointer
p 자체가 한 주소에 고정됩니다.
가능
금지
const int* const p
둘 다 const
값도 바꿀 수 없고 p도 다른 주소로 옮길 수 없습니다.
금지
금지
값을 보호읽기 전용 데이터를 가리킬 때 const int*를 씁니다.
주소를 고정포인터 변수가 다른 대상을 가리키지 못하게 할 때 int* const를 씁니다.
둘 다 보호의도치 않은 값 변경과 재지정을 모두 막습니다.
핵심은 const가 “값”을 잠그는지, “포인터 변수”를 잠그는지 분리해서 읽는 것입니다.