문제 13 · 상수 변수와 상수 포인터
문제 13 [4점]
아래 제시어에 대한 설명을 예시와 함께 서술하시오.
상수로 설정된 변수constant variable와 상수 포인터constant pointer
풀이 및 해설
상수 변수는 const로 선언되어 초기화 후 값을 바꿀 수 없는 변수입니다. 반드시 선언과 동시에 초기화해야 하고, 이후 대입은 컴파일 오류가 됩니다.
cpp
const int MAX = 100; // 상수 변수
// MAX = 200; // 오류: 상수의 값은 변경 불가상수 포인터는 자료형* const로 선언되어, 가리키는 대상(주소)을 바꿀 수 없는 포인터입니다. 즉 한 번 정한 주소에 고정됩니다. 단, 그 대상의 값은 바꿀 수 있습니다.
cpp
int x = 10, y = 20;
int* const p = &x; // 상수 포인터: 항상 x를 가리킴
*p = 15; // OK: 가리키는 대상(x)의 값은 변경 가능
// p = &y; // 오류: 다른 주소로 바꿀 수 없음혼동하기 쉬운 상수를 가리키는 포인터(const 자료형*)와 비교하면 방향이 반대입니다.
| 선언 | 가리키는 대상 변경 | 대상의 값 변경 |
|---|---|---|
int* const p (상수 포인터) | 불가 | 가능 |
const int* q (상수를 가리키는 포인터) | 가능 | 불가 |
즉 const가 * 앞에 있으면 "가리키는 값"이 상수, * 뒤(변수 이름 앞)에 있으면 "포인터 자신"이 상수입니다.