[C++]포인터와 const의 관계

지즈·2025년 7월 6일
0

C++

목록 보기
1/5

const와 포인터 관계

C++에서 const는 값을 수정할 수 없도록 만드는 키워드이다.
하지만 포인터와 함께 쓰이면, 가리키는 대상이 상수인지, 자신(포인터 자체)이 상수인지, 혹은 둘 다인지에 따라 전혀 다른 의미가 된다.

읽기 전용 포인터 : const T* p

선언된 순서 그대로 const한 T를 가리키는 포인터 라고 생각하면 된다. 이 포인터가 가리키는 대상은 const이기 때문에, 해당 포인터로는 대상의 값을 변경할 수 없다.

예제 코드

int data1 = 10;

const int* p = &data1;
// *p = 20; // error! - 참조하는 공간의 값 변경(쓰기) 불가능

int data2 = 20;
p = &data2; // 참조 대상을 변경할 수 있음 

// *p = 20; // error! - 여전히 이 포인터는 읽기 전용
  • 상수 데이터를 가리키는 포인터
  • 참조하는 대상은 변경할 수 있지만 참조하는 대상의 값을 변경할 수는 없다



상수 포인터 : T* const p

마찬가지로 선언된 순서 그대로 생각하면 된다. T를 가리키는 const 한 포인터이다. 포인터가 const하므로, 이 포인터의 값, 즉 주소를 변경할 수 없게 된다.

int* const p = &data1;
  • 고정된 주소만 갖는 포인터
  • 포인터가 참조하는 대상 자체를 변경할 수 없다
  • 포인터가 참조하는 대상의 값을 읽거나 변경할 수 있다




읽기 전용 상수 포인터

const int* const p = &data1;
  • 참조하는 대상 자체를 변경할 수 없다
  • 참조하는 대상의 값을 변경할 수 없다

다중 포인터

포인터 역시 하나의 변수이므로, 그 주소를 다른 포인터로 저장할 수 있다. 포인터를 가리키는 포인터를 다중 포인터(Multiple Pointer), 또는 흔히 더블 포인터(Double Pointer) 라고 부른다.


포인터 지옥에 다시 발을 담궜다. 따땃하구만...

profile
클라이언트 개발자가 되는 그 날까지 킵 고잉

4개의 댓글

comment-user-thumbnail
2025년 7월 6일

수상할 정도로 그림을 잘 그리는 프로그래머.

1개의 답글