반응형
포인터와 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; 라는 것이 있다.
이는 앞에서 말한 변수와 포인터 둘다 상수화하는 것을 의미한다.
반응형
'C, C++' 카테고리의 다른 글
inet_addr, inet_ntoa (0) | 2019.01.23 |
---|---|
static_cast, const_cast, reinterpret_cast (0) | 2019.01.23 |
클래스를 배열로(class - array) (0) | 2019.01.23 |
더블 포인터란 무엇인가? (double point) (0) | 2019.01.23 |
gcc의 undefined reference to '__gxx_personality_v0' 에러 (0) | 2019.01.22 |