모두CBT

다음 C 프로그램의 출력 결과는?#include <stdio.h&… | [9급 지방직 컴퓨터일반] 18년 1회차 기출문제 상세 페이지

1[9급 지방직 컴퓨터일반] 18년 1회차
다음 C 프로그램의 출력 결과는?
#include <stdio.h>
#define SIZE 3
void func(int *m, int *a, int b);

int main(void){
int num[SIZE] = { 1, 3, 6 };
int a=10, b=30;

func(num, &a, b);
printf("a = %d, b = %d\n", a, b);

return 0;
}
void func(int *m, int *x, int y){
int i = 0, n = 0;
y = *x;
n = *(m + 1) + (*m + 2);
*x = ++n;
}
1
a = 7, b = 10
2
a = 7, b = 30
3
a = 10, b = 10
4
a = 10, b = 30
해설

출력은 a = 7, b = 30이다.

func에서 m은 num 배열을 가리키므로 *(m + 1)은 3, (*m + 2)는 1 + 2 = 3이 되어 n = 6이다.
이어서 ++n으로 n이 7이 된 뒤 *x에 저장되는데, x는 main의 a 주소이므로 a가 7로 바뀐다.

b는 값으로 전달되어 func 안의 y = *x 대입은 지역 변수 y만 바꾸므로 main의 b는 30 그대로이다.

  • a = 7, b = 10은 y에 대입한 값이 main의 b에 반영된다고 본 결과로, 값에 의한 전달을 잘못 이해한 것이다.
  • a = 10, b = 10과 a = 10, b = 30은 포인터 x를 통한 a의 변경을 반영하지 않은 결과이다.

내용에 오류가 있거나 최신 법령·기준과 다른 부분이 보이면 알려주세요. 확인 후 반영하겠습니다.