C 언어 기초

int add(int a, int b) { return a + b; }
int mul(int a, int b) { return a * b; }
int main(void) {
    int (*op[2])(int, int) = {add, mul};
    int r = 1;
    for (int i = 0; i < 2; i++)
        r = op[i](r, 3);
    printf("%d\n", r);
    return 0;
}

함수 포인터 배열을 사용한 위의 프로그램을 실행했을 때의 출력으로 올바른 것은?

  1. A3
  2. B6
  3. C12
정답과 해설 보기

정답: C. 12

op는 int 2개를 받아 int를 반환하는 함수에 대한 포인터 2개를 나열한 배열로, op[0]에 add, op[1]에 mul의 주소가 들어 있습니다. op[i](r, 3)은 그 포인터가 가리키는 함수를 호출합니다. i = 0에서 r = add(1, 3) = 4, i = 1에서 r = mul(4, 3) = 12가 됩니다. 함수 포인터는 처리를 전환하는 테이블이나 인터럽트 벡터, 콜백 등에 사용됩니다.

이 분야 연습하기 분야로 돌아가기

C 언어 기초의 다른 문제

  1. fill과 use는 따로 정의된 함수로 한다. 위의 함수의 문제점으로 올바른 것은?
  2. 위의 함수 make가 반환하는 포인터에 대해 올바른 것은?
  3. C 언어에서 free(p); 바로 다음에 p = NULL;이라고 쓰는 것이 권장되는 이유로 가장 적절한 것은?
  4. 위의 함수 save에 8문자의 문자열 "ABCDEFGH"를 전달했다. 일어나는 일로 올바른 것은?
  5. C 언어에서 NULL 포인터를 참조했을(p가 NULL일 때 *p를 읽었을) 때의 설명으로 올바른 것은?