학부 때 한번 정리했다고 생각했는데 찾아보니 없어서 다시 정리해서 남겨 둔다.
const라는 키워드는 해당 값을 상수화 시키는 한정자로 사용한다. 하지만 대부분이 제대로 된 뜻도 모르고 그냥 앞에 const만 붙이고 (const int a) 끝낸다.
예를 들어 자료형이 int*
일때 사용할 수 있는 종류는 아래와 같이 3개나 된다.
const int * <variable> ->값을 상수화
int const * <variable> ->값을 상수화
int * const <variable> ->주소를 상수화
쉽게 생각해서 값을 상수화 하느냐 주소를 상수화 하느냐의 2가지 차이인데
어렵게 이해하지 말고 const
키워드는 바로 뒤에 있는 키를 잠근다고 생각하면 쉽다.
const <int> * var
-> 바로 뒤에 있는 int, 즉 값을 상수화 한다.
int const <*> var
-> 바로 뒤에 있는 *var
, 즉 값을 상수화 한다.
int * const <var>
-> 바로 뒤에 있는 var
, 즉 주소를 상수화 한다.
좀더 쉽게 설명하면 int const* p
의 경우 const 뒤에 *p
가 있으므로 *p
는 값을 변경할 수 없다. p
는 변경가능하다.
모두 변경 불가능 하게 하고 싶으면 int const*const p
로 해야 한다.
2중 포인터역시 마찬가지이다. const뒤에 나온 키워드가 잠긴다.
//const int * * p ->값 상수화(**p가 잠김)
//int const * * p ->**p 가 잠김
//int * const * p ->*p가 잠김
//int * * const p ->p가 잠김