C 언어 기초

char s[] = "abc", t[] = "xyz";
const char *p = s;
char *const q = s;

위의 선언 다음에 ㄱ "p = t;", ㄴ "*p = 'x';", ㄷ "q = t;", ㄹ "*q = 'x';" 중 하나를 쓴다. 컴파일 오류가 되는 것의 조합은?

  1. Aㄱ과 ㄹ
  2. Bㄴ과 ㄷ
  3. Cㄴ과 ㄹ
정답과 해설 보기

정답: B. ㄴ과 ㄷ

const char *p는 'const인 char를 가리키는 포인터'로, p를 통해 가리키는 곳의 문자를 고쳐 쓸 수는 없지만 p 자체를 다른 주소로 바꿀 수는 있습니다. char *const q는 '포인터 자체가 const'로, q를 바꿀 수는 없지만 q가 가리키는 곳은 고쳐 쓸 수 있습니다. 따라서 ㄴ(*p에 대한 대입)과 ㄷ(q에 대한 대입)이 오류가 됩니다. const가 *의 왼쪽에 있으면 가리키는 곳, 오른쪽에 있으면 포인터 자체를 바꿀 수 없다고 읽습니다.

이 분야 연습하기 분야로 돌아가기

C 언어 기초의 다른 문제

  1. 함수 포인터 배열을 사용한 위의 프로그램을 실행했을 때의 출력으로 올바른 것은?
  2. fill과 use는 따로 정의된 함수로 한다. 위의 함수의 문제점으로 올바른 것은?
  3. 위의 함수 make가 반환하는 포인터에 대해 올바른 것은?
  4. C 언어에서 free(p); 바로 다음에 p = NULL;이라고 쓰는 것이 권장되는 이유로 가장 적절한 것은?
  5. 위의 함수 save에 8문자의 문자열 "ABCDEFGH"를 전달했다. 일어나는 일로 올바른 것은?