반응형
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가 각각 무엇을 제한하는지를 해석하면 좋습니다.
반응형
'공부 > C언어' 카테고리의 다른 글
[C언어] 다차원 배열 개념과 활용 정리 (0) | 2025.05.15 |
---|---|
[C언어] 윤성우의 열혈 C 프로그래밍 - 도전! 프로그래밍2 (0) | 2025.05.14 |
[C언어] 함수와 배열, 그리고 포인터의 관계 정리, 함수의 호출방식 (0) | 2025.05.11 |
[C언어] 포인터 상수 형태의 문자열과 포인터 배열 개념 정리 (0) | 2025.05.11 |
[C언어] 포인터와 배열의 관계, 그리고 포인터 연산 정리 (0) | 2025.05.09 |