Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

nomad-programmer

[Programming/C++] 포인터와 const의 사용 본문

Programming/C++

[Programming/C++] 포인터와 const의 사용

scii 2023. 1. 9. 01:25

포인터 변수를 정의할 때는 const를 최대 2개까지 포함할 수 있다. 그 이유는 포인터 변수는 2개의 정보와 관련이 있기 때문이다. 
하나는 포인터 변수 자체에 보관된 정보다. 그리고 다른 하나는 포인터가 가리키는 변수에 보관된 정보를 말한다. 

즉, 이 두 가지 정보에 대해서 const 여부를 설정할 수 있는 것이다.

int a = 10;
int b = 20;
const int* p = &a;

p = &b; 	// ok
*p = 30; 	// fail

맨 앞에 const를 추가했다. 이렇게 한 것은 "p가 가리키는 변수는 const int 타입니다"라는 의미가 된다. 따라서 p가 가리키는 변수의 값을 바꾸는 것을 허용하지 않게 된다. p가 가리키는 변수는 실제로 const속성을 가졌는지는 중요하지 않다.
다만 이렇게 명시해줬기 때문에 컴퓨터는 p가 가리키는 변수가 const int 타입이라고 생각하고, 값의 변경을 막는 것이다.

int a = 10;
int b = 20;
int* const p = &a;

p = &b; 	// fail
*p = 30; 	// ok

이번에는 변수 이름 앞에 const를 넣어줬다. 이것은 "int 타입을 가리키는 p는 const 속성을 갖는다"라는 의미가 된다. 그래서 p의 값을 바꾸는 행위는 용납되지 않는다.
반면에 p 자체는 const지만 p가 가리키는 변수는 const가 아니므로 아무런 문제가 없다.

int a = 10;
int b = 20;
const int* const p = &a;

p = &b; 	// fail
*p = 30; 	// fail

이 경우는 포인터 p 뿐만 아니라 p가 가리키는 변수까지도 const라는 의미가 된다. 따라서 모두 오류가 발생한다.

const의 의미를 보는 방법
const의 의미를 보는 방법은 쉽다. const 다음에 오는 것을 상수화시켜버린다고 생각하면 된다.
'const int* p'는 const 다음에 int*가 오므로 'int* 타입의 값 즉, 포인터가 가리키는 값이 const'가 된다.
'int* const p'의 경우에는 const 다음에 p가 오므로 'p자체가 const'가 된다.
Comments