[C] const와 포인터
지난 포스팅에서 const와 포인터에 대해 알아보았다. 이제 그 둘의 관계에 대해 조금 더 알아보고자 한다.
기존에 배웠던 것을 떠올려보자.
int a = 0;
int* pInt = &a; //pInt가 a의 주소값을 가리키고 있다.
*pInt = 1; // a의 값이 1로 바뀌었다.
pInt = nullptr; // pInt가 a를 가리키지 않고 null을 가리키도록 바뀌었다.
여기까지는 잘 이해했을 거라고 생각한다.
포인터는 가리키는 변수의 값을 바꿀 수도 있고, 가리키는 것의 방향도 바꿀 수 있다.
- const 포인터
int b = 0;
const int* pConstInt = &a; //a 주소값을 가리킨다.
*pConstInt = 100; //error
// 포인터변수 자체가 상수가 아니라 가리키고 있는 a가 상수여서
// a의 값을 바꿀 수 없기에 에러가 발생한다(실행할 수 없는 코드)
pConstInt = &b; //b의 주소값을 가리킨다.
const가 *을 수식 중 => 포인터가 가리키는 원본을 상수화 한다.
- 포인터 const
int* const pIntConst = &a;
*pIntConst = 400; // a의 값이 400으로 바뀐다.
pIntConst = &b; // error,
// const는 포인터 변수 자체를 가리켜서 a를 가리키는 것을 b로 바꾸려고 할 때 오류가 발생한다.
const가 포인터 변수를 수식 중 => 포인터가 가리키고 있다는 것을 상수화 한다.
- const const
const 위치에 따라서 상수화를 할 수 있는 방법이 두 가지가 생긴다.
이것을 두 개 두 개 동시에 사용하면 두 개 다 상수화 할 수 있다.
//초기화 시 가리킨 대상만 가리킴, 가리키는 원본을 수정 할 수 없음
const int* const pConstIntConst = nullptr;
- 문제
int a = 0;
const int* pInt= &a;
a = 100;
이 코드에는 문제가 있을까?
정답은
더보기
No다. 문제없이 잘 작동한다.
이유는 스스로 생각해보자. 기억이 안 난다면 복습!
더보기
const는 해당 포인터가 a의 변수를 바꾸는 기능을 상수화 한것이지, a 자체가 상수인 것이 아니다. 그래서 a = 100; 하는 건 위의 const와 아무런 관련이 없다.
ㅎㅎ 사실 문제 처음 봤을 때 틀렸다...
'공부 > C, C++' 카테고리의 다른 글
[C] wchar_t 함수 ( wcslen( ), wcscat_s( ) ) (0) | 2022.01.09 |
---|---|
[C] 문자열, wchar_t (0) | 2022.01.09 |
[C] const, const 값 바꾸기 (0) | 2022.01.04 |
[C] 포인터 Pointer (0) | 2022.01.03 |
[C] 구조체 (0) | 2022.01.02 |
댓글