다음 C 코드를 실행했을 때의 출력값을 쓰시오.
#include <stdio.h>
typedef unsigned int *(*Mover)(unsigned int *);
unsigned int *advance_one(unsigned int *position) {
return position + 1;
}
int main(void) {
unsigned int values[] = {16u, 32u};
Mover move = advance_one;
unsigned int selected = *move(values);
printf("%x", selected);
return 0;
}모범답안
20
풀이와 판단 근거
move는 advance_one을 가리키며 values의 시작 주소를 전달하면 두 번째 원소의 주소를 반환한다. 역참조한 값은 10진수 32이고 printf의 %x는 이를 부호 없는 16진수 소문자로 출력하므로 결과는 20이다.
함수 포인터의 반환형과 배열 원소형이 unsigned int 포인터로 일치한다는 점도 함께 확인해야 한다.
자주 틀리는 지점
- 배열의 두 번째 값을 10진수 32 그대로 출력
- 포인터 주소 자체를 16진수로 출력한다고 판단
- 16진수 20을 10진수 20으로 다시 변환해 14라고 답함
자동 판정 방식
한글·영문 동의어와 문항별 필수 개념을 확인하며, 정답 단어가 부정되거나 반대 개념과 함께 쓰이면 자동 정답으로 확정하지 않습니다. 부분점수는 ITPASSLAB의 학습용 예상 점수입니다.