<aside>
💡 const는 왼쪽으로 작용하는 keyword이다. 왼쪽에 아무것도 없다면 오른쪽으로 작용한다.
const의 위치에 따라 어떻게 다른지 정리해보자.
</aside>
세 줄 요약
const char*
와 char const*
는 같다. 왜?
- const키워드는 왼쪽에 있는걸 const화 시킨다
- 왼쪽에 아무것도 없으면 오른쪽으로 작용한다
char const * p
- char를 const화 한다.
- p가 가리키는 대상은 변경 가능하지만,
- p가 가리키는 대상의 값은 변경할 수 없다.
#include <stdio.h>
int main(void)
{
char a[] = {'a', 'b'};
char const *p;
p = &a[0];
printf("%c\\n", *p);
p = &a[1];
printf("%c\\n", *p);
// *p = 'c'; // error: read-only variable is not assignable
a[1] = 'd';
printf("%c\\n", *p);
return 0;
}
- 8번 줄에서 p에 a[0]의 주소값을 할당했는데 10번줄에서 p가 가리키는 대상을 변경하고 있다.
- 12번줄전까지 a[1]과 p는 같은 곳을 가리키고있음. 12번 줄에서 a[1]의 값을 변경하고 13번줄에서 p가 가리키는 값을 출력하니 12번줄에서 변경한 ‘c’가 출력됨.
- 13번 줄. p가 가리키는 대상을 변경하려하니 에러가 발생함. p는 const char를 가리키기 때문. 그러나 a는 이러한 제한이 없으니 12번줄처럼 값 변경 가능.
const char * p
- char를 const화 한다. (왼쪽에 아무것도 없어서 오른쪽으로 작용.)
- p가 가리키는 대상은 변경 가능하지만,
- p가 가리키는 대상의 값은 변경할 수 없다.