c언어 개념 정리와 문제 풀이를 통해 알고리즘 수업을 준비하는 과정입니다. 그동안 수강했던 c언어 수업 자료와 윤성우의 열혈 C 프로그래밍의 내용을 포함해 저에게 기록할 가치가 있는 내용이 담겨 있습니다.
const 선언의 위치를 주의해서 보자.
포인터 변수가 참조하는 대상의 변경을 허용하지 않는 const 선언
int main(void) {
int num = 20;
const int * ptr = #
* ptr = 30; //error
num = 40;
}
const 선언을 맨 앞에 하게 되면,
"포인터 변수 ptr을 이용해서 ptr이 가리키는 변수에 저장된 값을 변경하는 것을 허용하지 않겠다"는 의미다.
num이 상수화되는 것은 아니다. const 선언으로 값을 변경하는 방법에 제한을 두는 것이다.
ptr을 통해서는 num을 변경할 수 없고, num 자체 변경은 가능하다.
포인터 변수의 상수화
int main(void) {
int num = 20;
int num2 = 30;
int const * ptr = #
* ptr = 30;
ptr = &num2; //error
}
포인터 변수 이름 앞에 const 선언을 하게 되면, 포인터 변수 ptr은 상수가 된다.
주소 값이 한 번 저장되면 변경이 불가능하다.
포인터 변수가 참조하는 대상의 변경을 허용하지 않는 const 선언 + 포인터 변수의 상수화
int main(void) {
int num = 20;
int num2 = 30;
const int const * ptr = #
* ptr = 30; //error
ptr = &num2; //error
}
const를 맨 앞, 포인터 변수 앞 동시에 선언도 가능하다.
ptr을 통해서 가리키는 값을 변경하는 것, ptr 변수에 저장된 주소 값 변경하는 것 모두 불가능해진다.
const 선언이 갖는 의미
const 선언을 많이 하면 그만큼 프로그램 코드의 안정성은 높아진다.
변경하면 안 되는 값을 갖는 변수에 대해서 const 선언을 하면 그 변수의 안정성이 확보된다.
변경하면 안 되는 값이 변경되는 오류를 실행파일이 생기기 전 막을 수 있으니 그만큼 코드의 안정성이 높아진다.
'Algorithm > C' 카테고리의 다른 글
[c언어 개념] #9 포인터의 포인터, 이중 포인터, 배열 포인터, 포인터 배열 (0) | 2022.07.24 |
---|---|
[c언어 개념] #8 2차원 배열 (0) | 2022.07.24 |
[c언어 개념] #6 포인터와 함수 (0) | 2022.07.20 |
[c언어 개념] #5 포인터와 배열 (포인터 변수, 포인터 상수, 변수 형태의 문자열, 상수 형태의 문자열, 포인터 배열) (0) | 2022.07.20 |
[c언어 개념] #4 포인터의 이해 (0) | 2022.07.20 |