2022 국가직9급 컴퓨터일반 6번 해설 — C 함수 호출
문제
C 언어에서 함수 호출 시 매개변수 전달 방법에는 값 에 의한 호출(Call by Value)과 참조에 의한 호출(Call by Reference)이 있다. C 프로그램 코드가 다음과 같을 때 설명으로 옳지 않은 것은? int get_average(int score[], int n) { int i, sum; for(i = 0; i < n; i++) sum += score[i]; return sum / n; } void main(void) { int score[3] = { 1, 2, 5 }; printf(“%d\n”, get_average(score, 3)); }
- ① 전달할 데이터의 양이 많을 경우에는 참조에 의한 호출이 효율적이다
- ② 값에 의한 호출로 전달된 데이터는 호출된 함수에서 값을 변경하더라도 함수 종료 후 해당 함수를 호출 한 상위 함수에 반영되지 않는다
- ③ 값에 의한 호출은 함수 호출 시 데이터 복사가 발생 한다
- ④ 위의 프로그램에서 함수 get_average()를 호출하는 데 사용한 매개변수 score는 값에 의한 호출로 처 리된다. ④ get_average() 함수는 배열을 입력값으로 받는데, 배열은 대표적 인 '참조에 의한 호출' 방법이다. <오 ← 정답
선지별 해설
① 전달할 데이터의 양이 많을 경우에는 참조에 의한 호출이 효율적이다
이 선지 진술은 옳음(O)
참조 전달은 데이터 전체를 복사하지 않고 주소를 통해 접근하므로 큰 자료구조에서 비용을 줄일 수 있다. C에서는 포인터를 이용해 유사하게 구현한다.
② 값에 의한 호출로 전달된 데이터는 호출된 함수에서 값을 변경하더라도 함수 종료 후 해당 함수를 호출 한 상위 함수에 반영되지 않는다
이 선지 진술은 옳음(O)
값 전달은 인자의 값을 복사해 매개변수에 저장한다. 따라서 매개변수를 바꾸어도 원래 변수 자체는 변하지 않는다.
③ 값에 의한 호출은 함수 호출 시 데이터 복사가 발생 한다
이 선지 진술은 옳음(O)
값 전달에서는 실제 인자의 값이 형식 매개변수로 복사된다. 복사본을 대상으로 연산한다는 점이 핵심이다.
④ 위의 프로그램에서 함수 get_average()를 호출하는 데 사용한 매개변수 score는 값에 의한 호출로 처 리된다. ④ get_average() 함수는 배열을 입력값으로 받는데, 배열은 대표적 인 '참조에 의한 호출' 방법이다. <오
이 선지 진술은 틀림(X)
배열 매개변수는 함수 선언에서 포인터로 조정되어 원본 배열의 원소에 접근한다. 따라서 이 예의 score는 단순한 값 복사 인자처럼 처리되지 않는다.
핵심 요약 (Q&A)
- Q. 2022 국가직9급 컴퓨터일반 6번의 핵심 쟁점은 무엇인가?
- A. 2022 국가직9급 컴퓨터일반 6번은 C 함수 호출에 관한 문항으로, "옳지 않은 것"을 고르는 문제입니다.
- Q. 2022 국가직9급 컴퓨터일반 6번의 정답은?
- A. 정답은 ④번입니다. 배열 매개변수는 함수 선언에서 포인터로 조정되어 원본 배열의 원소에 접근한다. 따라서 이 예의 score는 단순한 값 복사 인자처럼 처리되지 않는다.