目次:
1.函数指针和数组指针雷同,都是嵌套界说
- void(*pfunc1)() = test;void(*pfunc2)() = &test;char* (*pfunc3)(int*) = test1;
复制代码 2.用函数指针可以反过来调用函数
例子如下
- #includevoid test(){ printf("hehe\n");}int main(){ void(*pfunc1)() = test; void(*pfunc2)() = &test; (*pfunc1)(); pfunc1(); return 0;}
复制代码
3.《C陷阱和缺陷》中代码解析
- void (*signal(int , void(*)(int)))(int);
复制代码
4.实现盘算器并用函数指针优化
- # 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;}
复制代码
使用函数指针优化
- # 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
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |