본문 바로가기
공부/C언어

[C 언어] 포인터의 const 선언 완벽 정리

by 현구원 2025. 5. 12.
반응형

C 언어에서 const 키워드는 변수의 **변경 불가성(불변성)**을 의미합니다.
하지만 포인터와 함께 사용할 때는 위치에 따라 그 의미가 달라져 혼란스럽기 쉽습니다.
이번 글에서는 🔍 const 포인터 선언의 두 가지 주요 유형을 정리해보겠습니다.


I. 🔒 포인터가 가리키는 값을 변경할 수 없는 경우

const int *ptr = #

📌 또는

int const *ptr = #

이 선언은 ptr이 가리키는 값은 변경할 수 없지만, ptr이 다른 주소를 가리키는 것은 가능하다는 뜻입니다.

구문 예시 의미
const int *ptr = # *ptr을 통한 값 변경 ❌, ptr 주소 변경은 가능 ✅
*ptr = 30; ❌ 오류 발생
ptr = &other; ✅ 가능
 

✔ 실수 방지: 이 방식은 실수로 변수 값을 변경하지 않도록 방지할 수 있습니다.


II. 📌 포인터 자체가 상수인 경우 (주소 변경 불가)

int *const ptr = #

이 선언은 ptr이 처음 가리킨 주소는 고정되며 변경할 수 없지만, 해당 주소에 저장된 값은 변경할 수 있다는 뜻입니다.

구문 예시 의미
int *const ptr = # *ptr 값 변경 가능 ✅, ptr 주소 변경 ❌
*ptr = 30; ✅ 가능
ptr = &other; ❌ 오류 발생
 

✔ 이 방식은 특정 변수만 계속 가리켜야 할 때 사용됩니다.


III. 🔒📌 포인터와 값 모두 변경 불가한 경우

const int *const ptr = #

📌 이 선언은 ptr이 가리키는 주소도, 그 주소에 저장된 값도 변경할 수 없다는 뜻입니다.

구문 예시 의미
const int *const ptr = # *ptr 값 변경 ❌, ptr 주소 변경 ❌
*ptr = 30; ❌ 오류 발생
ptr = &other; ❌ 오류 발생
 

✔ 가장 강력한 const 선언 방식이며, 완전한 읽기 전용 포인터를 만들 때 사용됩니다.


✅ const 포인터 요약 표

선언 방식 값 변경 주소 변경 의미 요약
const int *ptr 값은 못 바꾸고, 주소는 바꿈
int *const ptr 값은 바꾸고, 주소는 못 바꿈
const int *const ptr 값도 주소도 못 바꿈

📌 정리하자면, const의 위치에 따라 의미가 달라지므로 선언 시 읽는 순서를 명확히 이해하는 것이 중요합니다.

🧠 읽는 순서 팁:
포인터 선언을 읽을 때는 먼저 *를 중심으로 나눈 뒤, 좌우에 있는 const가 각각 무엇을 제한하는지를 해석하면 좋습니다.

반응형