변수를 선언할 때 const
를 쓰면 해당 변수의 값을 변경할 수 없도록 합니다. 만일 const
로 선언된 변수를 변경하려고 하면 컴파일 단계에서 error가 검출 됩니다. 변수에 const
를 포함해 선언하는 방법은 다음과 같습니다.
xxxxxxxxxx
(const) int (const) var = 10; // 아무곳에 const를 써도 됨
const int var = 10; // var 변경 불가능
int const var = 10; // var 변경 불가능
포인터 변수의 경우 const
를 포함해 선언하는 방법은 다음과 같습니다.
xxxxxxxxxx
(const) int (const) * (const) pVar = &var; // 위치에 따라 의미가 다름
일반 변수의 경우 어디에 const
를 사용하든지 같은 의미지만,
포인터 변수의 경우 const
의 위치에 따라 다른 의미를 갖습니다.
xxxxxxxxxx
int var = 10;
const int *pVar1 = &var; // *pVar1 변경 불가능
int const *pVar2 = &var; // *pVar2 변경 불가능
int* const pVar3 = &var; // pVar3 변경 불가능
const int const *pVar4 = &var; // *pVar4 변경 불가능
int const * const pVar5 = &var; // *pVar5, pVar5 변경 불가능
const int* const pVar6 = &var; // *pVar6, pVar6 변경 불가능
규칙은 간단합니다. 변수를 선언할 때 const
를 사용하면 const
오른쪽을 변경 불가능하도록 합니다.
xxxxxxxxxx
int var1 = 10;
int var2 = 20;
int* const p1 = &var1; // p1 변경 불가능
*p1 = 100; // ok
p1 = &var2; // error
이중 포인터도 같은 원리로 여러 방법의 const
를 적용할 수 있습니다.
xxxxxxxxxx
(const) int (const) * (const) * (const) ppVar = &var;
몇 가지 예를 들면서 마무리하겠습니다.
xxxxxxxxxx
int v1 = 10;
int v2 = 20;
int* pV1 = &v1;
int* pV2 = &v2;
int* const *ppV = &pV; // *ppV 변경 불가능
ppV = &pV2; // ok
*ppV = &v1; // error
**ppV = v2; // ok
댓글
댓글 쓰기