2022 국가직9급 컴퓨터일반 7번 해설 — C 포인터와 배열
문제
다음 C 프로그램에서 밑줄 친 코드의 실행 결과와 동일한 결과를 출력하는 코드로 옳은 것만을 모두 고르 면? #include <stdio.h> int main() { int ary[5] = {10, 11, 12, 13, 14}; int *ap; ap = ary; printf(“%d”, ary[1]); return 0; } ㄱ. printf("%d", ary+1); ㄴ. printf("%d", *ap+1); ㄷ. printf("%d", *ary+1); ㄹ. printf("%d", *ap++);
- ① ㄱ, ㄴ
- ② ㄴ, ㄷ ← 정답
- ③ ㄷ, ㄹ
- ④ ㄴ, ㄷ, ㄹ 우선 ary 배열은 int형 변수 5개가 할당되고, ap 변수는 ary 배 열을 가리키는 배열 포인터이다. printf문은 ary배열의 첫 번째 값을 출력하므로, ary[1]의 값 11 을 출력한다. ㄴ. 포인터 ap에는 ary 배열의 첫 번째 주소가 들어간다. 따라서, *ap는 ary 배열의 첫 번째 주소에 있는 값, 즉 a[0]의 값 10을 불러오고, *ap + 1 = 10 + 1 = 11이 된다. ㄷ. 배열 변수는 뒤 괄호 부분을 생략하고 쓰면 그 자체로 포인터 변수로 사용할 수 있다. 따라서 ary는 ap과 같으며, *ary는 *ap와 같다.(ㄴ 참조) <오
선지별 해설
① ㄱ, ㄴ
이 선지 진술은 틀림(X)
ㄱ은 주소값을 출력하려 하므로 11이 아니다. ㄴ과 ㄷ은 각각 10+1로 11을 출력한다.
② ㄴ, ㄷ
이 선지 진술은 옳음(O)
*ap+1과 *ary+1은 모두 첫 원소 10에 1을 더해 11을 출력한다. ary+1은 주소이고 *ap++은 증가 전 첫 원소 10을 출력한다.
③ ㄷ, ㄹ
이 선지 진술은 틀림(X)
ㄷ은 *ary+1로 11이지만 ㄹ의 *ap++은 후위 증가가 적용되어 현재 *ap 값인 10을 출력한다. 따라서 ㄹ은 포함되지 않는다.
④ ㄴ, ㄷ, ㄹ 우선 ary 배열은 int형 변수 5개가 할당되고, ap 변수는 ary 배 열을 가리키는 배열 포인터이다. printf문은 ary배열의 첫 번째 값을 출력하므로, ary[1]의 값 11 을 출력한다. ㄴ. 포인터 ap에는 ary 배열의 첫 번째 주소가 들어간다. 따라서, *ap는 ary 배열의 첫 번째 주소에 있는 값, 즉 a[0]의 값 10을 불러오고, *ap + 1 = 10 + 1 = 11이 된다. ㄷ. 배열 변수는 뒤 괄호 부분을 생략하고 쓰면 그 자체로 포인터 변수로 사용할 수 있다. 따라서 ary는 ap과 같으며, *ary는 *ap와 같다.(ㄴ 참조) <오
이 선지 진술은 틀림(X)
ㄹ의 *ap++은 ap가 증가하기 전의 대상 값 10을 출력한 뒤 포인터가 이동한다. 11을 출력하는 것은 ㄴ과 ㄷ이다.
핵심 요약 (Q&A)
- Q. 2022 국가직9급 컴퓨터일반 7번의 핵심 쟁점은 무엇인가?
- A. 2022 국가직9급 컴퓨터일반 7번은 C 포인터와 배열에 관한 문항으로, "옳은 것"을 고르는 문제입니다.
- Q. 2022 국가직9급 컴퓨터일반 7번의 정답은?
- A. 정답은 ②번입니다. *ap+1과 *ary+1은 모두 첫 원소 10에 1을 더해 11을 출력한다. ary+1은 주소이고 *ap++은 증가 전 첫 원소 10을 출력한다.