黑龙江建设网站招聘,自学网站建设哪些网站,万方网官网入口,域名更换网站文章目录#x1f4c0;8.指向函数指针数组的指针#x1f4c0;9.回调函数#x1f4c0;8.指向函数指针数组的指针
#x1f330;请看代码与注释#x1f447;
int Add(int x, int y)
{return x y;
}
int Sub(int x, int y)
{return x - y;
}
int main()
{int (*pf)(int, int…
文章目录8.指向函数指针数组的指针9.回调函数8.指向函数指针数组的指针
请看代码与注释
int Add(int x, int y)
{return x y;
}
int Sub(int x, int y)
{return x - y;
}
int main()
{int (*pf)(int, int) Add;//函数指针数组int (*pfArr[4])(int, int) { Add,Sub };int (*(*ppfArr)[4])(int, int) pfArr;//ppfArr 是一个指向函数数组的指针return 0;
}9.回调函数 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针地址作为参数传递给另一个函数当这个指针被用来调用其所指向的函数时我们就说这是回调函数。回调函数不是由该函数的实现方直接调用而是在特定的事件或条件发生时由另外的一方调用的用于对该事件或条件进行响应。 举个例子
还是一个简易计算器
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.add 2.sub *******\n);printf(****** 3.mul 4.div *******\n);printf(****** 5.exit *******\n);printf(****************************************\n);
}
int main()
{int input 0;int x 0;int y 0;int ret 0; do{menu();printf(请选择:);scanf(%d, input);switch (input){case 1:printf(请输入两个操作数:);scanf(%d %d, x, y);ret Add(x, y);printf(%d\n, ret);break;case 2:printf(请输入两个操作数:);scanf(%d %d, x, y);ret Sub(x, y);printf(%d\n, ret);break;case 3:printf(请输入两个操作数:);scanf(%d %d, x, y);ret Mul(x, y);printf(%d\n, ret);break;case 4:printf(请输入两个操作数:);scanf(%d %d, x, y);ret Div(x, y);printf(%d\n, ret);break;case 0:printf(退出计算器\n);break;default:printf(选择错误\n);break;}} while (input);return 0;
}
☝️虽然可以很好的运行出来但是看一下这段代码是不是有些冗余 大部分代码都是重复的只有调用执行 - * / 运算的时候不一样那么我们可不可以把这每段重复的部分封装成一个函数呢❓
我们来进行优化改装一下
void Calc(int(*pf)(int, int))
{int x 0;int y 0;int ret 0;printf(请输入两个操作数:);scanf(%d %d, x, y);ret pf(x, y);printf(%d\n, ret);
}我们把每次输入输出 执行运算封装成这样的一个函数只保留一个使用函数指针来接收 优化后的源码
#includestdio.hint 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.add 2.sub *******\n);printf(****** 3.mul 4.div *******\n);printf(****** 5.exit *******\n);printf(****************************************\n);
}
void Calc(int(*pf)(int, int))
{int x 0;int y 0;int ret 0;printf(请输入两个操作数:);scanf(%d %d, x, y);ret pf(x, y);printf(%d\n, ret);
}
int main()
{int input 0;do{menu();printf(请选择:);scanf(%d, input);switch (input){case 1:Calc(Add);break;case 2:Calc(Sub);break;case 3:Calc(Mul);break;case 4:Calc(Div);break;case 0:printf(退出计算器\n);break;default:printf(选择错误\n);break;}} while (input);return 0;
} 可能有那么一点点复杂希望烙铁们能够理解‼️ 总结 以上就是 指针的进阶【下篇】 内容啦 本文章所在【C语言知识篇】专栏感兴趣的烙铁可以订阅本专栏哦 希望我们可以做一个用心的人 小的会继续学习继续努力带来更好的作品 创作写文不易还多请各位大佬uu们多多支持哦