C, C++

포인터와 const

슬픈달 2019. 1. 23. 09:16
반응형

포인터와 const 키워드

포인터를 const키워드로 상수화 시킨다는 것은 2가지 의미를 가진다.

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

 

ex1)
int a =10;
const int *p = &a;
*p =30; //error
a = 30; //ok

 

 

위의 예제를 보면 const키워드의 위치가 int 앞에 나와있다.
이는 *p가 a라는 변수를 상수화한다는 의미를 나타낸다.
p라는 포인터가 봤을때  변수 a가 상수처럼 보인다는 뜻이다.
위 코드를 보면 *p =30; 는 error 메세지가 나오고 a = 30 는 통과된다.
이는 변수 a가 지니는 값을 상수화 한다는 것이 아니라 위에 말한 변수 a를 상수화 하기 때문에 그렇다.
즉 a값을 변경하는 것을 막는 것이 아니라 포인터를 통해 접근 하였을 때만 막는것이다.

2. 포인터의 상수화
ex2)

 

int a=10;
int b=20;
int *const p =&a;
p =&b //error
*p =30; //ok

 

 

두번째 예제에서는 const키워드가 p앞에 붙어 있다. 이는 예제 1과 다르게 포인터 자체를 상수화 한다는 의미이다.
p라는 포인터가 지니고 있는 주소값 자체를 상수화 한다는 의미이다.
이로써 포인터 p는 변수의 생명이 다할때까지 a를 가르키고 있어야한다.

이외에도
const int *const p = &a; 라는 것이 있다.
이는 앞에서 말한 변수와 포인터 둘다 상수화하는 것을 의미한다.

반응형