다음 C 프로그램의 실행 결과를 줄 단위로 쓰시오. 단, sizeof(int)=4, sizeof(int*)=8이다.
#include <stdio.h>
void function1(int *p) { *p = 50; }
void function2(int p) { p = 60; }
void function3(int arr[]) {
printf("3.%zu\n", sizeof(arr) / sizeof(arr[0]));
}
void function4(int (*arr)[8]) {
printf("4.%zu\n", sizeof(*arr) / sizeof((*arr)[0]));
}
int main(void) {
int value = 10;
int arr[8] = {0};
function1(&value);
printf("1.%d\n", value);
function2(value);
printf("2.%d\n", value);
function3(arr);
function4(&arr);
return 0;
}모범답안
1.50 2.50 3.2 4.8
풀이와 판단 근거
function1은 주소를 받아 원본 값을 50으로 변경한다. function2는 값의 복사본만 60으로 바꾸므로 원본은 계속 50이다.
함수 매개변수의 int arr[]는 포인터처럼 처리되므로 8/4=2가 된다. 반면 int (*arr)[8]에서 *arr는 원소 8개짜리 배열 전체이기 때문에 32/4=8이다.
자주 틀리는 지점
- 연산자 우선순위나 재귀 반환 순서를 생략하고 눈에 보이는 값만 바로 계산함
- 값 전달·참조 전달, 오버라이딩·오버로딩 또는 배열과 포인터의 차이를 혼동함
- 출력의 공백·줄바꿈·대소문자를 무시해 1.50 / 2.50 / 3.2 / 4.8와 다른 형식으로 작성함
자동 판정 방식
한글·영문 동의어와 문항별 필수 개념을 확인하며, 정답 단어가 부정되거나 반대 개념과 함께 쓰이면 자동 정답으로 확정하지 않습니다. 부분점수는 ITPASSLAB의 학습용 예상 점수입니다.