본문 바로가기

C언어 프로그래밍

포인터와 const 키워드


포인터를 상수화한다?

 

1. 포인터 자체를 상수화시킨다라는 의미

   int a=10;

   int b=20;

   int* const p=&a;

   p=&b;   //  에러

   *p=30;   //  이상무!

  

   포인터가 상수화되었다는 것은 포인터 p가 지니는 주소 값을 변경할 수 없다는 뜻이다.

 

2. 포인터가 가리키는 변수를 상수화시킨다.

 

    int a=10;

    const int* p=&a;

    *p=30;  // 에러

    a=30;   // 이상무!

 

   포인터p를 통해서 변수 a의 값이 변경하는 것만 막는 것이다. 이는 포인터가 p가 가리키는 것이 변수 a이므로 a가 상수화된다고 생각하기 쉽다. 그러나 a 자체가 상수화되는 것이 아니다.

 

 

   int a=10;

   int b=20;

   const int* const p=&a;

   p=&b;  // 에러

   *p=30; // 에러

 

   위는 포인터와 포인터가 가리키는 변수를 동시에 상수화시켰다.

 

   const를 사용하는 이유?

     몇 천 라인이 넘는 프로그램을 작성하고 돌려보니 컴파일도 되고 오류 메세지도 보여주지 않지만 막상 실행해보면 버그가 발생되는 일이 있을 수 있다. 이런 일을 미연에 방지하기 위해 변수를 상수화 선언을 시켜 다른 함수에서 그 변수를 변경시 오류를 발생시켜 좀 더 쉽게 일을 처리할 수 있게 만든다.