변수를 상수로 만들고자 할때 즐겨 사용하는 키워드가 const 이다.
const char *MSG = "ERROR";
이와 같은 형태로 사용하는데
제대로된 순서로 적을려면
char const *MSG = "ERROR";
이다.
물론 처음 적은 것이 틀렸다는 의미는 아니고 const 연산자의 특성을 이해하기 위해서는
두번째 방법으로 적는것이 이해하는데 통일성이 있어서 유리하다는 의미이다.
const 연산자는 좌측 즉 왼쪽에 오는 것들에 영향을 미친다.
char const *p 는 상수문자열를 가르키는 일반 포인터이고
char *const p는 일반문자열을 가르치는 상수 포인터이다
상수 문자열은 수정이 불가능한 문자열을 의미하고
일반 문자열은 수정이 가능한 문자열이다.
그리고
일반 포인터란 가르키는 대상이 변경이 가능한것을 의미하고
상수 포인터란 가르키는 대상을 변경할수 없는 것을 의미한다.
다시 설명하면
첫번째 char const *p에서 포인터 p는 수정이 불가능한 상수 문자열을 가르키는 포인터로 사용가능하다는 의미이다.
그렇기 때문에 편의에 따라서 p가 다른 문자열 상수를 포인팅하도록 수정이 가능하다.
그러나 가르키는 문자열이 상수이기 때문에 문자열 자체를 수정할수는 없다.
두번째 char *const p는 포인터가 상수이기 때문에 한번 포인터가 assign되면 다른 문자열을 포인팅 할수 없다.
대신 가르키는 문자열은 상수가 아니기 때문에 문자열을 수정할수는 있다.