请选择 进入手机版 | 继续访问电脑版

函数指针

[复制链接]
唐少琼 发表于 2021-1-1 10:29:20 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
目次:



1.函数指针和数组指针雷同,都是嵌套界说

  1. void(*pfunc1)() = test;void(*pfunc2)() = &test;char* (*pfunc3)(int*) = test1;
复制代码
2.用函数指针可以反过来调用函数

  1.         (*pfunc1)();        pfunc1();
复制代码
例子如下
  1. #includevoid test(){        printf("hehe\n");}int main(){        void(*pfunc1)() = test;        void(*pfunc2)() = &test;        (*pfunc1)();        pfunc1();        return 0;}
复制代码

3.《C陷阱和缺陷》中代码解析

  1. (*(void (*)())0)();
复制代码

  1. void (*signal(int , void(*)(int)))(int);
复制代码

4.实现盘算器并用函数指针优化

  1. # define _CRT_SECURE_NO_WARNINGS #include int add(int a, int b){        return a + b;}int sub(int a, int b){        return a - b;}int mul(int a, int b){        return a*b;}int div(int a, int b){        return a / b;}int main(){        int x, y;        int input = 1;        int ret = 0;        do        {                printf("*************************\n");                printf(" 1:add             2:sub \n");                printf(" 3:mul             4:div \n");                printf("*************************\n");                printf("请选择:");                scanf("%d", &input);                switch (input)                {                case 1:                        printf("输入操纵数:");                        scanf("%d %d", &x, &y);                        ret = add(x, y);                        printf("ret = %d\n", ret);                        break;                case 2:                        printf("输入操纵数:");                        scanf("%d %d", &x, &y);                        ret = sub(x, y);                        printf("ret = %d\n", ret);                        break;                case 3:                        printf("输入操纵数:");                        scanf("%d %d", &x, &y);                        ret = mul(x, y);                        printf("ret = %d\n", ret);                        break;                case 4:                        printf("输入操纵数:");                        scanf("%d %d", &x, &y);                        ret = div(x, y);                        printf("ret = %d\n", ret);                        break;                case 0:                        printf("退出程序\n");                        break;                default:                        printf("选择错误\n");                        break;                }        } while (input);        return 0;}
复制代码

使用函数指针优化
  1. # define _CRT_SECURE_NO_WARNINGS #include int add(int a, int b){        return a + b;}int sub(int a, int b){        return a - b;}int mul(int a, int b){        return a*b;}int div(int a, int b){        return a / b;}int main(){        int x, y;        int input = 1;        int ret = 0;        do        {                printf("*************************\n");                printf(" 1:add             2:sub \n");                printf(" 3:mul             4:div \n");                printf("*************************\n");                printf("请选择:");                scanf("%d", &input);                //数组 存 函数指针->函数指针数组                int(*arr[5])(int x, int y) = { NULL, add, sub, mul, div };                //映射表                printf("输入操纵数:");                scanf("%d %d", &x,&y);                int ret = arr[input](x,y);                printf("%d\n",ret);        } while (input);        return 0;}
复制代码


来源:https://blog.csdn.net/weixin_50886514/article/details/111903322
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )