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만 가리켜야 한다.