Algorithm/C

[c언어 개념] #7 포인터 대상의 const 선언

하노정 2022. 7. 20. 17:44

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 선언을 하면 그 변수의 안정성이 확보된다.

변경하면 안 되는 값이 변경되는 오류를 실행파일이 생기기 전 막을 수 있으니 그만큼 코드의 안정성이 높아진다.