강좌 & 팁
C언어가 막강하지만, 초보자에게 높은 벽이 포인터입니다.
포인터가 무엇인가 이해하게 되었을 쯤 또 헷갈리게 하는 것이 있습니다.
바로 const와의 조합입니다.
아래 두 행의 차이점을 이해하시겠습니까?
const char *ptr;
char * const ptr;
갑자기 보게 되면 아리송해지는 질문입니다만, 포인터의 값을 구하는 방법을 이해하신다면
매우 쉬운 내용입니다.
우선 포인터 변수가 가르키는 값을 구할 때는 '*' 를 사용합니다.
즉, ptr 이 가지고 있는 값(주소)을 가져 올 때는 일반 변수를 사용하듯 변수 이름만 사용합니다.
ptr의 주소가 가르키는 위치의 값을 구할 때 '*' 를 앞에 붙이죠.
- 포인터 ptr의 값을 구할 때는 int addr = ptr;
- 포인터 ptr의 값을 주소로 하여 주소 값을 구할 때는 char ch = *ptr;
당연한 얘기를 좀 길게 했습니다. 자, 이제 const를 사용해 보죠.
const char *ptr 이라고 const를 앞에 붙이고 이후에 *ptr 이라고 적었습니다.
즉, *ptr의 값을 상수 처리하겠다는 것으로 *ptr 값이 변경되는 것을 막게 됩니다.
char * const ptr 이라고 하면? 눈치 채셨겠습니다만, ptr의 값을 상수값으로
처리 하겠다는 뜻입니다.
이렇게 const를 사용하면 컴파일할 때 걸러 줍니다.
const char *ptr; 또는 char const *ptr;
ptr = &ch_data;
*ptr = 'b'; <<---- 여기서 에러가 발생합니다.
이해 되시죠?
char * const ptr;
ptr = &ch_data; <<---- 여기서 에러가 발생합니다.
*ptr = 'b';