1. const 키워드
const 키워드는 다들 아시다시피 변수 선언시 자료형 앞뒤에 사용되어 상수로 선언한다. 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;
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과 같이 가리키는 대상의 값을 변경할 수 없다. 왜냐하면, 앞서 말한대로 가리키는 대상이 상수를 의미하기 때문이다. int b = 20;
const int* p = &a;
*p = 20; // (에러)
p = &b; // (정상) 포인터가 다른 대상을 가리킬 수 있다.
p = &b; // (정상) 포인터가 다른 대상을 가리킬 수 있다.
다음은 const가 변수 뒤에 붙는 경우를 살펴보자.
int a = 10;
int b = 20;
int* const p = &a;
p앞에 const 가 붙어 있으므로 우선 p는 상수이다. 그리고 자료형으로 (int*)가 쓰였으므로 정수형 포인터이다. 다시 말해 p는 정수형 변수를 가리키는 포인터 상수가 된다. 따라서 p = &b와 같이 다른 값을 가리킬 수 없다. 왜냐하면 p 자체가 상수이기 때문에 p의 값을 변경 할 수 없다. int b = 20;
int* const p = &a;
의미는 서로 조금 차이가 있지만 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 |