C

포인터 상수

1space 2025. 6. 14. 02:57

기본 포인터와 const 한 개 (어디에 붙느냐에 따라 다름)

 

먼저, 일반 포인터 구조 복습

int a = 10;
int *p = &a;

여기서 p는 두 가지를 바꿀 수 있습니다:

  1. p 자신이 가리키는 대상을 바꿀 수 있습니다 → p = &b;
  2. p가 가리키는 값(= a의 값)도 바꿀 수 있습니다 → *p = 20;

즉, 포인터는 "가리키는 대상도 바꾸고", "값도 바꿀 수 있다" → 자유로운 상태입니다.

 

상황 1: const int *p;

또는

int const *p;

 

가리키는 대상의 값을 바꿀 수 없다.
하지만 p가 가리키는 대상을 바꾸는 건 가능하다.

💡 예시:

int a = 10, b = 20;
const int *p = &a;   // 또는 int const *p = &a;

*p = 15;    // 오류! 값 변경 불가
p = &b;     // OK! 대상 변경은 가능
  • 읽기 전용 포인터라고도 부릅니다.
  • *p = ... 금지
  • p = ... 허용

"나는 어떤 값을 참조하긴 하지만, 그 값을 바꾸진 않을 거야."

상황 2: int *const p = &a;

p가 가리키는 대상을 바꿀 수 없다.
하지만 p가 가리키는 값은 바꿀 수 있다.

💡 예시:

int a = 10, b = 20;
int *const p = &a;

*p = 15;   // OK! 값은 바꿀 수 있음
p = &b;    // 오류! 대상 변경 불가

"나는 처음 가리킨 대상만 바라볼 거야. 대신 그 값은 내가 바꿀 수 있어."

 

상황 3: const int *const p = &a;

또는

int const *const p = &a;

 

값도 못 바꾸고, 대상도 못 바꿈 → 완전 상수화

💡 예시:

int a = 10, b = 20;
const int *const p = &a;

*p = 15;   // 오류! 값 변경 불가
p = &b;    // 오류! 대상 변경 불가

"나는 a만 바라보면서, 그 안에 뭐가 있든 바꿀 생각은 없어."

요약표: const 위치에 따른 의미 차이

선언 의미 가르키는 값 변경 대상 변경
const int *p or int const *p 가리키는 값은 못 바꿈, 대상은 바꿈
int *const p 가리키는 대상은 못 바꿈, 값은 바꿈
const int *const p 값도 못 바꿈, 대상도 못 바꿈
 

'C' 카테고리의 다른 글

문자열 상수  (0) 2025.06.14
void 포인터  (0) 2025.06.14
2차원 배열  (0) 2025.06.14
포인터 배열  (0) 2025.06.13
다중 포인터  (0) 2025.06.13