[c] 함수형 포인터와 함수의 인자의 타입

함수포인터(Function Pointer)는 C언어의 중요한 기능 중 하나로, 함수를 가리키는 포인터를 의미합니다. 이러한 포인터를 사용하면 다른 함수를 호출하는 함수, 또는 함수를 인자로 전달하는 함수를 구현할 수 있습니다. 함수포인터는 특정 타입의 함수를 가리키며, 이에 맞는 함수의 인자 타입에 맞추어야 합니다.

함수포인터 정의하기

함수포인터를 선언할 때는 해당 함수의 반환 타입과 인자들의 타입을 명시해야 합니다. 예를 들어, int형을 반환하고 int형 인자 하나를 받는 함수를 가리키는 함수포인터는 다음과 같이 선언할 수 있습니다.

int (*funcPtr)(int);

위 코드에서 (*funcPtr)은 함수포인터를 나타내고, int는 해당 함수의 반환 타입을, 그 뒤에 나오는 (int)는 해당 함수의 인자 타입을 나타냅니다.

함수포인터를 사용하여 함수 호출하기

이제 함수포인터를 이용하여 다른 함수를 호출하는 방법을 살펴보겠습니다.

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

int main() {
    int (*funcPtr)(int);  // 함수포인터 선언
    funcPtr = &add;       // 함수포인터에 함수 주소 할당

    int result = funcPtr(3, 5);  // 함수포인터를 통한 함수 호출

    return 0;
}

위 코드에서 funcPtradd 함수를 가리키는 함수포인터이며, 이를 통해 add 함수를 호출하여 result 변수에 결과를 저장합니다.

함수포인터를 인자로 받는 함수 구현하기

함수포인터를 인자로 받는 함수를 구현할 때에는 해당 함수의 형식을 따르는 함수포인터를 인자로 받아야 합니다.

void process(int (*funcPtr)(int), int a, int b) {
    int result = funcPtr(a, b);
    // result를 이용한 추가적인 처리
}

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

int multiply(int a, int b) {
    return a * b;
}

int main() {
    process(&add, 3, 5);
    process(&multiply, 3, 5);

    return 0;
}

위 코드에서 process 함수는 funcPtr이라는 함수포인터를 인자로 받아 해당 함수를 호출하고 추가적인 처리를 수행합니다.

함수포인터를 활용하면 유연하고 동적인 함수 호출을 가능하게 하며, 다양한 콜백 함수 및 인터페이스를 구현할 수 있습니다.