68.4 연습문제: 함수 포인터 만들기

다음 소스 코드를 완성하여 "Hello, 100"이 출력되게 만드세요.

practice_function_pointer.c

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

void hello()
{
    printf("Hello, ");
}

void numberToString(int n, char *buffer)
{
    sprintf(buffer, "%d", n);
}

int main()
{
    _________________________
    _________________________
    char buffer[20];
    
    fp1 = hello;
    fp2 = numberToString;

    fp1();
    fp2(100, buffer);
    printf("%s\n", buffer);

    return 0;
}

실행 결과

Hello, 100

정답

 void (*fp1)();
 void (*fp2)(int, char *);

해설

fp1hello 함수의 메모리 주소를 넣은 뒤 fp1을 호출하여 "Hello, "가 출력되고 있습니다. 따라서 함수 fp1는 함수 포인터이며 매개변수와 반환값이 없으므로 void (*fp1)();과 같이 만들어줍니다. 그리고 fp2numberToString 함수의 메모리 주소를 넣은 뒤 fp2를 호출하여 숫자 50을 문자열로 변환하고 있습니다. 여기서 numberToString 함수는 매개변수가 int, char 포인터이고 반환값이 없으므로 void (*fp2)(int, char *);와 같이 만들면 됩니다.