[c언어] 함수 포인터와 함수 배열

C언어에서는 함수 포인터와 함수 배열을 사용하여 프로그래밍을 할 수 있습니다. 이러한 기능들은 유연한 프로그래밍을 가능하게 하며, 다양한 상황에 맞게 함수를 다룰 수 있습니다.

함수 포인터

함수 포인터란, 함수의 주소를 저장하는 포인터입니다. 이를 통해 함수의 주소를 다른 변수에 저장하거나, 해당 주소를 이용하여 함수를 호출할 수 있습니다. 이는 함수를 다른 함수에 인자로 전달하거나, 함수를 반환하는 함수를 작성하는 등의 유연한 프로그래밍을 가능하게 합니다.

#include <stdio.h>

// 덧셈 함수
int add(int a, int b) {
    return a + b;
}

// 뺄셈 함수
int subtract(int a, int b) {
    return a - b;
}

int main() {
    int (*operation)(int, int); // 함수 포인터 선언
    operation = add; // 함수 포인터에 add 함수의 주소 저장
    printf("%d\n", operation(5, 3)); // 함수 포인터를 이용한 함수 호출

    operation = subtract; // 함수 포인터에 subtract 함수의 주소 저장
    printf("%d\n", operation(5, 3)); // 함수 포인터를 이용한 함수 호출

    return 0;
}

위의 예제에서 int (*operation)(int, int);은 두 정수를 받아 정수를 반환하는 함수 포인터를 선언한 것입니다. 이를 통해 add 함수와 subtract 함수의 주소를 각각 operation에 저장하고, 이를 통해 두 함수를 호출하고 있습니다.

함수 배열

함수 배열은 함수 포인터를 원소로 갖는 배열입니다. 여러 개의 함수를 한 곳에 모아두고, 인덱스를 통해 해당 함수를 선택하여 호출할 수 있습니다.

#include <stdio.h>

// 덧셈 함수
int add(int a, int b) {
    return a + b;
}

// 뺄셈 함수
int subtract(int a, int b) {
    return a - b;
}

int main() {
    int (*operation[2])(int, int) = {add, subtract}; // 함수 배열 선언 및 초기화
    printf("%d\n", operation[0](5, 3)); // 함수 배열을 통한 함수 호출
    printf("%d\n", operation[1](5, 3)); // 함수 배열을 통한 함수 호출

    return 0;
}

위의 예제에서 int (*operation[2])(int, int)는 두 개의 정수를 받아 정수를 반환하는 함수 포인터를 원소로 갖는 배열을 선언한 것입니다. 이를 통해 add 함수와 subtract 함수의 주소를 배열에 초기화하고, 이를 통해 두 함수를 호출하고 있습니다.

함수 포인터와 함수 배열은 C언어에서 함수를 유연하게 다루는데 사용되며, 다양한 프로그래밍 상황에서 유용하게 활용될 수 있습니다.

이 외에도 함수 포인터와 함수 배열에 관한 더 자세한 내용은 C언어 함수 포인터 및 함수 배열 참고 자료를 참고하시기 바랍니다.