찬란

포인터와 const 본문

프로그래밍 언어/C, C++

포인터와 const

chan4 2023. 4. 13. 23:27

상수를 가리키는 포인터 (Pointer to const Value) = const int*

상수를 가리키는 포인터는 상수 변수의 주소를 가리키는 비상수(non-const) 포인터다

const int value = 5;

const int* ptr = &value;

ptr 은 const int를 가리키고, ptr 자체는 비상수(non-const) 포인터이다.

상수를 가리키는 포인터는 상수가 아닌 변수를 가리킬 수 있다.

초기에 const로 정의된 변수만 상수로 취급한다.

int value = 5;
const int* ptr = &value;

value = 6 // 가능!

그러나 다음은 불가능하다.

int value = 5;
const int* ptr = &value;

*ptr = 6; // 불가능!

ptr은 상수를 가리키는 포인터이므로, value를 상수로 취급한다.

따라서 상수를 변경하는 행위는 컴파일 에러로 판단한다.

 

상수 포인터 (Const pointer) = int* const

상수 포인터는 초기화 후에 가리키는 주소를 변경할 수 없는 포인터이다.

int value = 5;

int* const ptr = &value;

상수 포인터도 일반 상수 변수와 마찬가지로 선언 시 초기화해야 한다.

상수 포인터는 항상 같은 주소를 가리킨다!

이 때, 주소만 상수일 뿐, 주소가 가리키는 값은 상수가 아니므로 역참조하여 값을 변경할 수 있다.

int value1 = 5;
int value2 = 10;
int* const ptr = &value;

ptr = &value2; // 이건 불가능

*ptr = 6 // 이건 가능

상수를 가리키는 상수 포인터 (Const pointer to a const value) = const int* const

상수를 가리키는 상수 포인터는 다른 주소를 가리키도록 수정할 수 없으며, 역참조를 통해 값을 수정할 수도 없다.

'프로그래밍 언어 > C, C++' 카테고리의 다른 글

포인터(Pointer)  (0) 2023.04.13
포인터와 배열 (Pointer and Array)  (0) 2023.04.13
이중 포인터 (Pointers to pointers)  (0) 2023.04.13
스마트 포인터(Smart pointer)  (0) 2023.04.13
exit() 함수  (0) 2023.04.13
Comments