공부/C || C++

C++ const가 붙는 위치에 따른 의미변화

sudo 2021. 9. 1. 23:56

포인터 변수의 const는 붙는 위치에 따라 의미가 다르다. 아래 글은 Reference에 쓰여져 있는 포스팅이 정리가 잘 되어 있어서 인용했다.

int const * p; // 1
int * const p; // 2
int const * const p; // 3
const int * p; // 4


p = (int *)0x1000; // 가
p++; // 나
*p = 100;  // 다
a = *p;  // 라

const는 바로 앞의 키워드에 대해 상수화가 이루어진다고 보면 된다. 단 예외적으로 4번은 앞에 아무 키워드도 없으니 뒤에 있는 키워드에 대해 상수화를 시킨다. 그래서

 

1 -> 값에 대한 상수화

2 -> 포인터에 대한 상수화

3 -> 값, 포인터 모두에 대한 상수화

4 -> 값에 대한 상수화

 

그래서 1, 2, 3, 4번이 가, 나, 다, 라 중 할 수 없는 동작을 매칭 해보면

 

1 -> 값을 바꾸지 못하니 '다' (나는 주소값을 바꾸고 있으니 가능)

2 -> 주소를 바꾸지 못하니 '가', '나'

3 -> 값, 주소 모두 바꾸지 못하니 '가', '나', '다' 

4 -> '다'

 

 

Reference

https://preventionyun.tistory.com/23

 

const 위치 별 의미

int const * p; // 1 int * const p; // 2 int const * const p; // 3 const int * p; // 4 p = (int *)0x1000; // 가 p++; // 나 *p = 100; // 다 a = *p; // 라 const는 위치에 따라서 의미가 헷갈린다. const는..

preventionyun.tistory.com