C 언어 기초
char s[] = "abc", t[] = "xyz";
const char *p = s;
char *const q = s;위의 선언 다음에 ㄱ "p = t;", ㄴ "*p = 'x';", ㄷ "q = t;", ㄹ "*q = 'x';" 중 하나를 쓴다. 컴파일 오류가 되는 것의 조합은?
- Aㄱ과 ㄹ
- Bㄴ과 ㄷ
- Cㄴ과 ㄹ
정답과 해설 보기
정답: B. ㄴ과 ㄷ
const char *p는 'const인 char를 가리키는 포인터'로, p를 통해 가리키는 곳의 문자를 고쳐 쓸 수는 없지만 p 자체를 다른 주소로 바꿀 수는 있습니다. char *const q는 '포인터 자체가 const'로, q를 바꿀 수는 없지만 q가 가리키는 곳은 고쳐 쓸 수 있습니다. 따라서 ㄴ(*p에 대한 대입)과 ㄷ(q에 대한 대입)이 오류가 됩니다. const가 *의 왼쪽에 있으면 가리키는 곳, 오른쪽에 있으면 포인터 자체를 바꿀 수 없다고 읽습니다.