[C++] # 1. Const (상수화) / 포인터상수와 상수포인터

Crush_on_Study·2022년 6월 29일
0

C++ 기초

목록 보기
2/2
post-thumbnail

상수화하다

const

코드를 짜다보면, 이변이 없는한 절대 바꾸지 않을 값들이 있을거에요.
사람으로치면 생일, 계좌번호같은 정보겠죠? 이런 정보는 사용자가 실수로 인해 바꾸게 되면 큰일 나니까 이를 방지하는 스킬이 있습니다.

그게 const 입니다.

  • const int num = 5;

이렇게 선언되면 num은 5로 고정된 것이므로, 변수가 아닌 상수가 됩니다.

  • const int *ptr1 = &num1;

이렇게 선언되면 포인터변수 ptr1을 사용해서 num1에 저장된 변수 값을 바꾸는게 불가능합니다. 아래서 예시를 들겠습니다.

  • int *const ptr2 = &num2;

이거는 ptr2 포인터변수가 상수화 된 것을 말합니다.


const int *ptr 결과 (포인터 상수)

  • ptr1은 상수화 되었기 때문에 값을 바꿀 수가 없습니다.
    하지만 cin >> num을 통해서는 값을 언제든지 바꿀 수 있습니다.

따라서, 포인터변수만 상수화된 것이고 num은 여전히 변수입니다.


int *const ptr 결과 (상수 포인터)

?? 이건 되네요! 근데!

얘는 안되요.
구분하는 방법은 *의 위치입니다. *이 선언되면 뒤이어 나오는 변수들은 상수가 됩니다.
그렇기 때문에 int *const ptr1은 주소값이 상수처리가 되어서 다른 주소를 가리킬 수가 없는 것입니다.

다시 const int *ptr1 은 포인터변수가 상수화가 된 거라
기존의 *ptr1 값에서 변경이 불가능한 것입니다.

profile
방구석백수 코드몽키

0개의 댓글