[c언어] 함수 포인터와 함수 포인터의 배열과 콜백 함수

프로그래밍에서 함수 포인터는 매우 유용하게 활용됩니다. 이번에는 C 언어에서 함수 포인터와 함수 포인터의 배열, 그리고 콜백 함수에 대해 알아보겠습니다.

함수 포인터

함수 포인터는 함수를 가리키는 포인터입니다. 함수의 이름이 해당 함수의 시작 주소를 가리키므로, 이러한 주소를 저장하기 위해 함수 포인터를 사용합니다. 함수 포인터를 선언할 때는 함수의 시그니처, 즉 반환형과 매개변수의 타입을 지정해야 합니다.

아래는 간단한 함수 포인터의 선언 및 사용 예시입니다.

#include <stdio.h>

int add(int a, int b) {
    return a + b;
}

int main() {
    int (*funcPtr)(int, int) = add;
    int result = funcPtr(3, 4);
    printf("%d\n", result);
    return 0;
}

위 코드에서 funcPtradd 함수를 가리키는 함수 포인터입니다.

함수 포인터의 배열

함수 포인터의 배열은 함수를 가리키는 포인터들의 배열입니다. 이를 사용하면 여러 함수 중 하나를 선택적으로 호출할 수 있습니다.

아래는 함수 포인터의 배열을 사용한 예시입니다.

#include <stdio.h>

int add(int a, int b) {
    return a + b;
}

int subtract(int a, int b) {
    return a - b;
}

int main() {
    int (*funcPtrs[2])(int, int) = {add, subtract};
    printf("%d\n", funcPtrs[0](10, 5));  // add 함수 호출
    printf("%d\n", funcPtrs[1](10, 5));  // subtract 함수 호출
    return 0;
}

위 코드에서 funcPtrsaddsubtract 함수를 가리키는 함수 포인터 배열입니다.

콜백 함수

콜백 함수는 다른 함수에 의해 호출되는 함수로, 이때 호출되는 함수는 콜백 함수의 포인터를 매개변수로 전달합니다. 콜백 함수는 이벤트 핸들링, 정렬, 비동기 작업 등 다양한 상황에서 유용하게 활용됩니다.

아래는 콜백 함수의 예시입니다.

#include <stdio.h>

void performOperation(int a, int b, int (*operation)(int, int)) {
    int result = operation(a, b);
    printf("Result = %d\n", result);
}

int add(int a, int b) {
    return a + b;
}

int subtract(int a, int b) {
    return a - b;
}

int main() {
    performOperation(10, 5, add);       // add 함수를 콜백으로 전달
    performOperation(10, 5, subtract);  // subtract 함수를 콜백으로 전달
    return 0;
}

위 코드에서 performOperation 함수는 두 정수와 함수 포인터를 매개변수로 받아 해당 함수를 호출합니다.

이상으로 C 언어에서 함수 포인터와 함수 포인터의 배열, 그리고 콜백 함수에 대해 알아보았습니다.

참고 문헌: