[C&C++] const 와 pointer의 조합

프로그래밍/c/cpp 2007. 12. 13. 14:30 posted by oviedo

C++ 에서 사용하는 keyword 중 하나인 const...
때론 좀 햇갈리게 하는 경우(예: type fn_name(...) const {})가 있던 중 다음의 글을 찾아서 퍼 옴.




출처:
http://blog.naver.com/asca99
원문: http://blog.naver.com/asca99/80014320926


회사에서 시행되는 S/W 역량 강화 시험을 준비하다가 갑자기 생각나서 자료를 찾아 보았다.
 
cont keyword와 pointer를 같이 쓸때의 정확한 의미가 궁금해서 말이다.
 
기본적으로 const는 변수 정의시 같이 사용하면 변수의 값을 절대 바꿀수 없게 되어 있다.
때문에 const를 사용하여 변수 정의할 때는 초기화를 해 주지 않으면 그 변수는 다시는 값을 저장할 수 없는 경우가 발생한다.
 
포인터 변수에 const는 두 개까지 사용할 수 있다. 왜냐고?
포인터 변수를 생각해 보면 포인터 변수는 기본적으로 주소를 가지고 있고, 그 주소를 따라가면 뭔가 자료가 저장되어 있다. 그러므로 변경하지 못하게 하는게 두개가 생긴다. 바로 포인터 변수가 가지고 있는 주소값과 그 주소값에 저장되어 있는 값 말이다.
int a = 10;
int b = 5;
const int *p1 = &a;
int * const p2 = &a;
 
이렇게 변수를 const를 이용하여 정의 할 수 있다.
컴파일러가 이를 해석하는 입장으로 생각해 보자.
 
p1의 경우 const가 적용되는 부분이 int * 이다. 그러므로
*p1 = 20;
과 같이 사용하면 에러가 된다. 바꿀 수 없는 녀석을 바꿀려고 한다는 것이다. 대신 p1 = &b;는 가능하다.
두번째 경우인 p2의 경우
const p2 에만 적용이 된다. 즉 p2의 내용인 주소를 변경할 수 없다는 것이다.
그러므로
p2 = &b로 사용할 수 없다. 대신 *p2 = b; 는 가능하다.
 
그럼 이것들을 전부 적용해보면
const int * const p3 = &a;
 
는 p3가 가지는 주소값도 변경 못하면서, 그 주소값에 있는 값도 바꿀수 없게 된다.
 
요약하자면

"const는 그 다음에 오는 것을 상수화 시킨다"


'프로그래밍 > c/cpp' 카테고리의 다른 글

bcpp 5.5 사용시 자주 써먹는 유틸리티 함수들  (0) 2016.03.22
[C&C++] Inheritance between classes  (0) 2007.12.17
[C&C++] friend  (0) 2007.12.16
[C&C++] static member  (0) 2007.12.16
[C&C++] constructor, destructor  (0) 2007.12.16
[C&C++] const 와 pointer의 조합  (0) 2007.12.13
TAG