본문 바로가기

CS 지식

[C++] const와 pointer

1. const

해당 값이 상수(변하지 않는 값)임을 지정하고, 프로그래머가 초기화 외에는 수정할 수 없게 하는 키워드다.

포인터의 위치에 따라 const가 갖는 의미가 다르다.

 

2. 상수 포인터 (const pointer)

int a = 100;
int b = 200;

//non const 포인터
int* ptr = &a;
ptr = &b; //주소 변경 가능
*ptr = 300; //값 변경 가능

//상수 포인터(const pointer)
int* const ptr2 = &a;
ptr2 = &b; //포인터가 상수이므로 변경 불가능
*ptr2 = 300; //값은 변경 가능

포인터 *의 우측에 const가 위치한다.

포인터 변수를 상수화한 것이며, 초기에 가리키는 주소를 고정한다.

선언과 동시에 초기화해야 한다.

 

 

3. 상수에 대한 포인터 (pointer to const)

int a = 100;
int b = 200;

//non const 포인터
int* ptr = &a;
ptr = &b; //주소 변경 가능
*ptr = 300; //값 변경 가능

//상수에 대한 포인터
const int* ptr2 = &a;
ptr2 = &b; //포인터가 상수가 아니므로 변경 가능
*ptr2 = 300; //가리키는 값이 상수이므로 변경 불가능

포인터 *의 왼쪽에 const가 위치한다.

int *ptr을 상수화하겠다는 뜻으로, *ptr이 가리키는 값이 상수가 되어 값을 변경할 수 없게 된다.

 

4. 상수에 대한 상수 포인터 (const pointer to pointer)

int a = 100;
int b = 200;

//non const 포인터
int* ptr = &a;
ptr = &b; //주소 변경 가능
*ptr = 300; //값 변경 가능

//상수에 대한 상수 포인터
const int* const ptr2 = &a;
ptr2 = &b; //포인터가 상수이므로 변경 불가능
*ptr2 = 300; //가리키는 값이 상수이므로 변경 불가능

포인터 변수와 *ptr 모두 상수화한 것이기 때문에 포인터와 값 모두 변경 불가능하다.

 

5. 클래스에서 const

클래스에서 const를 선언할 시 반드시 초기화를 해줘야 한다.

멤버 함수 반환값이 const라면 반환값이 상수다.

함수가 const인 경우 해당 함수 내에서 멤버 변수들을 읽기 전용으로 보겠다는 뜻이다.

이 경우 멤버 변수를 수정할 수 없고, 다른 멤버 함수를 부를 때 const인 함수만 호출 가능하다.

 

참고자료

https://coding-factory.tistory.com/660

https://github.com/Romanticism-GameDeveloper/GameDeveloper-Client-Interview/blob/main/C%2B%2B/const.md

 

'CS 지식' 카테고리의 다른 글

[C++] map vs unordered_map  (0) 2025.05.08
[C++] malloc(), free() vs new, delete  (0) 2025.04.20
[C++] Cast  (0) 2025.04.19
[C++] 배열과 리스트  (0) 2025.04.19
[C++] Sort 함수  (0) 2025.04.19