Nagie's DevStory

[C] 36. const의 사용법 ( 2 ) 본문

Programming/C

[C] 36. const의 사용법 ( 2 )

Nagie 2023. 10. 4. 22:43
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