• 作者:老汪软件技巧
  • 发表时间:2023-12-25 11:00
  • 浏览量:

一、什么是函数指针数组?

函数指针数组本质是数组,存放的元素是函数指针类型的,即存放函数的地址。

函数指针数组的类型:

如下列代码,指针数组pfArr的类型是 int(*[2])(int, int)

[ ]的优先级比*高,pfArr先与[ ]结合,因此pfArr是数组

int (*) (int,int)是数组存放元素的类型,即函数指针类型

int Add(int x, int y)
{
    return x + y;
}
int Sub(int x, int y)
{
    return x - y;
}
int main()
{
    int* pf1 = &Add;
    int* pf2 = ⋐
    int(*pfArr[2])(int, int) = { pf1,pf2 };//数组中存放类型相同的元素
    return 0;
}

二、函数指针数组实现计算器小程序

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;
}
void Menu()
{
    printf("********************\n");
    printf("*****  1. 加法 *****\n");
    printf("*****  2. 减法 *****\n");
    printf("*****  3. 乘法 *****\n");
    printf("*****  4. 除法 *****\n");
    printf("*****  0. 结束 *****\n");
    printf("********************\n");
}
int main()
{
    int(*pfArr[])(int, int) = { NULL,Add,Sub,Mul,Div };
    int x = 0;
    int y = 0;
    int input = 0;
    do
    {
        Menu();
        printf("请选择:>");
        scanf("%d", &input);
        if (input == 0)
        {
            printf("退出程序\n");
        }
        else if (input >= 1 && input <= 4)
        {
            printf("请输入两个操作数:>");
            scanf("%d %d", &x, &y);
            printf("%d\n", pfArr[input](x, y));
        }
        else
        {
            printf("非法输入,请重新输入\n");
        }
    } while (input);
    return 0;
}