Nagie's DevStory
[C] 36. const의 사용법 ( 2 ) 본문
728x90
상수형 변수에선 const의 위치에 따른 의미변화가 없었지만
상수형 포인터 변수에선 const의 위치에 따른 의미변화가 생긴다.
int num = 1;
const int* ptr1 = # //포인터가 가리키는 값에 대해 상수화
int* const ptr2 = # //자기 자신의 메모리 값을 상수화
const 키워드가 앞에 붙으면 해당 포인터가 가리키는 값을 상수화한다.
그렇다고 오해하면 안 되는 게 포인터를 통한 연산만 상수화가 되는 것이고 num 변수 자체는 상수화가 되지 않는다.
const 키워드가 뒤에 붙는다면 포인터 변수 자기 자신의 값을 상수화하게 된다.
포인터 변수의 자기 자신을 상수화한다는 건 해당 포인터 변수가 가지고 있는 메모리 값을 변경할 수 없다는 의미이며
다른 변수의 메모리 값을 대입하게 된다면 에러가 발생한다.
만약 포인터 변수로 값을 변경하지 않고 참조만 하며 다른 메모리값을 받을 계획이 없다면 아래처럼 해괴한 형태가 된다.
int num = 1;
const int* const ptr = #
보기엔 해괴하지만, C로 작성된 프로그램의 대부분이 포인터로 인한 프로그램의 버그가 많이 발생하는 편이며
위와 같은 코드 형태는 포인터로 인한 버그를 어느 정도 방지하기 위해 사용하는 일종의 안전장치 같은 느낌이다.
즉 포인터는 양날의 검이기 때문에 항상 신중하게 사용해야 하며
위에서 설명한 방법을 적절히 사용해 안전하게 사용하면 좋다.
728x90
Comments