[C] const 위치에 따른 명확한 의미

spring·2020년 11월 9일
0

학부 때 한번 정리했다고 생각했는데 찾아보니 없어서 다시 정리해서 남겨 둔다.

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가 잠김
profile
Researcher & Developer @ NAVER Corp | Designer @ HONGIK Univ.

0개의 댓글