[const 키워드]

Development/C/C++ 2013. 10. 22. 17:02

1. const 키워드
const 키워드는 다들 아시다시피 변수 선언시 자료형 앞뒤에 사용되어 상수로 선언한다.
  const 사용방법은 다음과 같으며 모두 동일하게 동작한다. 
1) const 자료형 변수명  =  초기값
      ex) const float PI = 3.1415;

2) 자료형 const 변수명  =  초기값
      ex) float const PI = 3.1415;

3) const 변수명  =  초기값
      ex) const TWIN = 2;

위의 코드는 모두 동일하게 동작한다. 그런데 자료형에 앞과 뒤에 붙는 const 키워드는 무슨 차이가 있을까?
다음에서 한번 살펴보자.


2. 포인터와 const 키워드
우선 const 키워드가 변수 앞에 붙는 경우를 살펴보자.
int a = 10;
int b = 20;
const int* p = &a;
위 문장을 살펴보면 p는 정수형 포인터(int *)이다. 정수형 (int) 앞에 const 가 붙었으므로 p는 정수 중에서도 상수만을 가리키게 된다. 따라서, p는 상수만을 가리키는 정수형 포인터라는 의미이다. 따라서 *p = 20과 같이 가리키는 대상의 값을 변경할 수 없다. 왜냐하면, 앞서 말한대로 가리키는 대상이 상수를 의미하기 때문이다. 
*p = 20;   // (에러)
p = &b;   // (정상) 포인터가 다른 대상을 가리킬 수 있다.

다음은 const가 변수 뒤에 붙는 경우를 살펴보자.
int a = 10;
int b = 20;
int* const p = &a;
p앞에 const 가 붙어 있으므로 우선 p는 상수이다. 그리고 자료형으로 (int*)가 쓰였으므로 정수형 포인터이다. 다시 말해 p는 정수형 변수를 가리키는 포인터 상수가 된다. 따라서 p = &b와 같이 다른 값을 가리킬 수 없다. 왜냐하면 p 자체가 상수이기 때문에 p의 값을 변경 할 수 없다. 

의미는 서로 조금 차이가 있지만 const는 자료형의 어디에 붙어도 동일한 기능을 수행한다. 하지만 관습적으로 const 를 문장 앞에 놓는것을 선호하기 때문에 자료형의 앞에 놓는 것이 좋다. 프로그램은 나 혼자 개발하는 것이 아니라 모두가 함께 개발하는 것이기 때문이다. 

'Development > C/C++' 카테고리의 다른 글

[코드에서 endian을 파악하는 방법]  (0) 2014.01.06
[C 올림 구현]  (0) 2013.12.01
[가장 간단한 이진수 출력]  (0) 2013.10.17
[2차원 배열 파라미터 전달]  (0) 2013.04.26
[배열을 null로 초기화]  (0) 2013.04.14
Posted by cyj4369
,