阅读 140

函数指针数组

我们先来看一下什么是函数指针
有一个函数

int Add(intx,inty){return x+y;
}int main(){int x=10;int y=20;int ret=Add(x,y);printf("%d",ret);
}

函数名Add
函数地址为Add,(也就是函数名)

函数指针,是用来存放函数地址的指针
那么我们看这个加法函数的地址就是Add
所以 我们怎么用函数指针,来存放这个Add函数地址呢?

int (*pa) (int,int)=Add

这是一个函数指针,函数地址为pa,(*pa)代表是一个指针,什么指针呢接着往下看,是个指向(int,int)函数参数类型为int的指针,返回类型为int.

这就是我们函数指针,那么函数指针数组是什么呢?
我们再来了解一下指针数组

int* arr[10]={0};

这是一个名叫arr数组,里面存放着10个元素,每个元素的元素类型为int* ,然后需要给这个数组初始化

回归正题,函数指针数组是什么呢?

int (*pa[ 元素个数]) (int,int)={初始化}

这就是一个函数指针数组,本质上是一个数组,用来存放函数指针数组名字为pa 参数有【】,*其他剩余的就是数组类型int ()(int,int),这是一个函数指针类型**。

我们来看函数指针数组的用途

我们来写一个代码,实现一个计算器。void menu() {    printf("******************************************\n");    printf("******1.ADD            2.Jian*************\n");    printf("*******3.Cheng         4.Chu**************\n");    printf("*********    0.退出     ******************\n");    printf("******************************************\n");
}int Add(int x, int y) {    return x + y;
}int Jian(int x, int y) {    return x - y;
}int Cheng(int x, int y) {    return x * y;
}int Chu(int x, int y) {    return x / y;
}int main() {    int input = 0;    int x = 0;    int y = 0;    do {
        menu();        printf("请选择菜单\n");        scanf("%d", &input);        switch (input) {        case 1:            printf("请输入两个数\n");            scanf("%d%d", &x, &y);            printf("%d\n", Add(x, y));            break;        case 2:            printf("请输入两个数\n");            scanf("%d%d", &x, &y);            printf("%d\n", Jian(x, y));            break;        case 3:            printf("请输入两个数\n");            scanf("%d%d", &x, &y);            printf("%d\n", Cheng(x, y));            break;        case 4:            printf("请输入两个数\n");            scanf("%d%d", &x, &y);            printf("%d\n", Chu(x, y));            break;        case 0:            printf("退出\n");            break;        default:            printf("输入有误\n");            break;
        }
    } while (input);
}

函数指针数组

这是我们利用普通的函数来实现的 这段代码,出现多处重复语句,总的来说就是太死板,太麻烦,如果我要添加一项其他的计算规则,又要去switch语句中,添加规则,到时候我的switch语句就老长老长了,代码出现任何问题,维护上来说也是难上加难!

我们来通过函数指针数组来简化这样的代码void menu() {    printf("******************************************\n");    printf("******1.ADD            2.Jian*************\n");    printf("*******3.Cheng         4.Chu**************\n");    printf("*********    0.退出     ******************\n");    printf("******************************************\n");
}int Add(int x, int y) {    return x + y;
}int Jian(int x, int y) {    return x - y;
}int Cheng(int x, int y) {    return x * y;
}int Chu(int x, int y) {    return x / y;
}int main() {    int input = 0;    int x = 0;    int y = 0;    int(*pa[5])(int, int) = { 0,Add,Jian,Cheng,Chu };    do {
        menu();        printf("请选择菜单\n");        scanf("%d", &input);        if (input >= 1 && input <= 4) {            printf("请输入两个数\n");            scanf("%d%d", &x, &y);            int ret = pa[input](x,y);            printf("%d\n", ret);
        }        else if (input == 0) {            printf("退出");
        }        else {            printf("选择错误\n");
        }

    } while (input);
    }

通过数组下标找到元素,再通过元素找到函数
完美!!!
等等等等,再说明一点
函数指针数组的用途是:转移表!


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐