함수 포인터 배열 및 응용

1. 함수 포인터 배열

  1. 정의: 정수 포인터 배열은 정수 포인터를 저장하는 배열입니다. 문자 포인터 배열은 문자 포인터를 저장하는 배열입니다. 함수 포인터 배열은 함수 포인터를 저장하는 배열입니다.

  2. 예제:

#include <stdio.h>
int add(int x, int y) {
    return x + y;
}
int sub(int x, int y) {
    return x - y;
}
int mul(int x, int y) {
    return x * y;
}
int div(int x, int y) {
    return x / y;
}
int main() {
    int(*pFun1)(int, int) = add; // 함수 포인터
    int(*pFun2)(int, int) = sub;
    int(*pFun3)(int, int) = mul;
    int(*pFun4)(int, int) = div;
    printf("%d\n", pFun1(2, 4));
    printf("%d\n", pFun2(2, 4));
    printf("%d\n", pFun3(2, 4));
    printf("%d\n", pFun4(2, 4));
    return 0;
}

여기서 함수 포인터의 유형이 모두 같음을 알 수 있습니다. 따라서 함수 포인터 배열을 사용하여 코드를 간소화할 수 있습니다.

#include <stdio.h>
int add(int x, int y) {
    return x + y;
}
int sub(int x, int y) {
    return x - y;
}
int mul(int x, int y) {
    return x * y;
}
int div(int x, int y) {
    return x / y;
}
int main() {
    int i;
    int(*pFunArr[4])(int, int) = { add, sub, mul, div }; // 함수 포인터 배열
    for (i = 0; i < 4; i++) {
        int result = pFunArr[i](2, 4);
        printf("%d\n", result);
    }
    return 0;
}

2. 전환 표

계산기의 일반적인 구현 방법:

#include <stdio.h>
int add(int x, int y) {
    return x + y;
}
int sub(int x, int y) {
    return x - y;
}
int mul(int x, int y) {
    return x * y;
}
int div(int x, int y) {
    return x / y;
}
int main() {
    int x, y;
    int input, result;
    do {
        printf("***************************\n");
        printf("******1.추가     2.빼기******\n");
        printf("******3.곱하기     4.나누기******\n");
        printf("******0.종료            ******\n");
        printf("***************************\n");
        scanf("%d", &input);
        switch (input) {
        case 1:
            printf("두개의 연산자 값을 입력하세요: \n");
            scanf("%d %d", &x, &y);
            result = add(x, y);
            printf("%d\n", result);
            break;
        case 2:
            printf("두개의 연산자 값을 입력하세요: \n");
            scanf("%d %d", &x, &y);
            result = sub(x, y);
            printf("%d\n", result);
            break;
        case 3:
            printf("두개의 연산자 값을 입력하세요: \n");
            scanf("%d %d", &x, &y);
            result = mul(x, y);
            printf("%d\n", result);
            break;
        case 4:
            printf("두개의 연산자 값을 입력하세요: \n");
            scanf("%d %d", &x, &y);
            result = div(x, y);
            printf("%d\n", result);
            break;
        case 0:
            printf("프로그램을 종료합니다.\n");
            break;
        default:
            printf("잘못된 선택입니다.\n");
            break;
        }
    } while (input);
    return 0;
}

개선된 버전:

#include <stdio.h>
int add(int x, int y) {
    return x + y;
}
int sub(int x, int y) {
    return x - y;
}
int mul(int x, int y) {
    return x * y;
}
int div(int x, int y) {
    return x / y;
}
int main() {
    int x, y;
    int input = 1, result;
    int(*pFunArr[5])(int, int) = { 0, add, sub, mul, div }; // 함수 포인터 배열
    do {
        printf("***************************\n");
        printf("******1.추가     2.빼기******\n");
        printf("******3.곱하기     4.나누기******\n");
        printf("******0.종료            ******\n");
        printf("***************************\n");
        scanf("%d", &input);
        printf("연산자 값을 입력하세요: \n");
        scanf("%d %d", &x, &y);
        if (input == 1 || input == 2 || input == 3 || input == 4) {
            result = (*pFunArr[input])(x, y);
            printf("%d\n", result);
        } else if (input == 0) {
            printf("프로그램을 종료합니다.\n");
        } else {
            printf("잘못된 선택입니다.\n");
        }
    } while (input);
    return 0;
}

결론: 동일 유형의 함수를 여러 번 호출할 때 함수 포인터 배열을 사용하면 코드를 간소화할 수 있습니다!

이 기사는 여기에서 끝납니다.

태그: 함수-포인터-배열 C-언어

5월 24일 19:08에 게시됨