다음 C 프로그램의 실행 결과를 쓰시오.
#include <stdio.h>
struct Node {
int value;
struct Node *next;
};
int main(void) {
struct Node a = {1, NULL};
struct Node b = {2, NULL};
struct Node c = {3, NULL};
a.next = &b;
b.next = &c;
c.next = NULL;
c.next = &a;
a.next = &b;
b.next = NULL;
struct Node *head = &c;
printf("%d %d %d", head->value,
head->next->value,
head->next->next->value);
return 0;
}모범답안
3 1 2
풀이와 판단 근거
포인터 필드에 새 주소를 대입하면 이전 연결은 덮어써진다. 두 번째 연결 작업이 끝난 뒤에는 c→a→b→NULL 순서가 된다.
head는 c를 가리킨다. head의 값은 3, 그 다음 a의 값은 1, 다시 그 다음 b의 값은 2이기 때문에 3 1 2가 최종 출력에 나타난다.
자주 틀리는 지점
- 연산자 우선순위나 재귀 반환 순서를 생략하고 눈에 보이는 값만 바로 계산함
- 값 전달·참조 전달, 오버라이딩·오버로딩 또는 배열과 포인터의 차이를 혼동함
- 출력의 공백·줄바꿈·대소문자를 무시해 3 1 2와 다른 형식으로 작성함
자동 판정 방식
한글·영문 동의어와 문항별 필수 개념을 확인하며, 정답 단어가 부정되거나 반대 개념과 함께 쓰이면 자동 정답으로 확정하지 않습니다. 부분점수는 ITPASSLAB의 학습용 예상 점수입니다.