c언어 독학 const
c언어 독학 const
이번 글에서는 C언어 const를 포인터 변수에 선언하는 개념을 정리해볼까 합니다. const는 어떤 값이 변경되지 못하도록 상수로 선언하는 건데요. 포인터 변수에도 똑같이 적용할 수 있습니다. 포인터 변수를 이용하면 변수에 저장된 값도 변경할 수 있고, 포인터 변수에 저장된 변수의 주소 값도 변경할 수 있는데 이런 것들을 못하게 막아버리는 것입니다. 먼저 포인터에 저장된 변수의 주소 값을 변경하는 경우입니다.
▲ 예제에서는 int형 변수 x, y를 선언하고 각각 100과 200으로 초기화하고 있으며 포인터 변수 aa를 선언해서 그곳에 x의 주소 값을 저장하고 있습니다. 그리고 바로 이어서 aa에 x대신 y의 주소 값을 대입하고 있으며 결과가 제대로 출력이 되는 걸 확이할 수 있습니다. 이처럼 포인터 변수가 가리키는 주소를 변경해줄 수 있는데요. 이런 변경하지 못하도록 다음과 같이 const를 선언할 수 있습니다.
▲ 포인터 변수 aa의 앞에 const를 붙여주면 되구요. 저장된 값을 변경하려고 하자 에러가 발생하는 걸 확인할 수 있습니다. 이 선언은 주소 값 변경만 못하도록 하는 것이기 때문에 *aa=500; 처럼 그곳에 접근해서 저장된 값을 변경하는 것은 가능합니다. 참고하시고요.
다음은 포인터 변수가 가리키고 있는 변수에 저장된 값을 변경하지 못하도록 하는 과정입니다. 이는 자료형 앞에 const를 넣어주면 되는데요. 다음과 같습니다.
▲ const를 int 앞에 작성하면 aa가 가리키고 있는 x에 저장된 값은 변경하지 못하게 됩니다. 그럼에도 *연산자를 이용해서 x의 값을 변경하려고 하자 에러가 발생합니다. 하지만 앞에서 알아본 경우와는 반대로 aa에 저장되어 있는 변수의 주소 값은 변경할 수 있다는점은 참고하셔요. 그리고 이 두 가지 선언을 동시에 할 수도 있습니다. 즉, 변수의 주소 값도 변경하지 못하도록 하고 그곳에 저장된 값도 변경하지 못하도록 동시에 선언할 수 있습니다.
이렇게 해서 포인터 변수의 상수화에 대해서 알아봤습니다. 수고하셨어요.