Programming/C / C++

const 를 이용한 포인터 상수화

역시인생한방 2015. 2. 7. 19:28

1. 포인터가 가리키는 변수의 상수화

 

void main()

{

int a = 10;

const int* p = &a;

*p = 20;        // 에러

a = 20;         // 정상 출력

}

 

 

즉, p가 가리키는 대상이 상수화가 된다.

그렇기 때문에 *p = 20 했을 때, *p가 가리키는 대상이 상수화 되기 때문에 값을 변경하지 못한다.

그러나, 포인터가 가리키는 값만 변경하지 못할 뿐, 일반 변수로써의 a값은 변경 가능하다.

 

 

 

2. 포인터 상수화

 

void main()

{

int a = 10;

int b = 20;


int* const p = &a;

p = &b;        // 에러

*p = 30;       // 정상 출력

}

 

 

p 자체가 상수화 된다.

p는 원래 a를 가리켰기 때문에, 다른 위치(b)를 가리킬 수 없다.

즉, p가 가리키는 주소는 다른 주소로 변경될 수 없다.

 

 

 

3. 포인터가 가리키는 변수의 상수화 + 포인터 상수화

  

const int* const p = &a;

 

1번과 2번을 합쳐놓은 형태이다.

포인터 p가 가리키는 변수의 값도 변경하지 못하고, 포인터 p는 프로그램이 종료될 때까지

a만 가리켜야 한다.


출처 : http://blog.naver.com/ac7979/140084296409