찬란
포인터와 const 본문
상수를 가리키는 포인터 (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