一、什么是回调函数
简单来说就是通过函数指针调用的函数。
复杂一些呢就是说将函数的指针(地址)作为参数传递给另外一个函数使用,当这个指针被用来调用其指向的函数的时候被调用的函数就是回调函数。
二、回调函数怎么使用
1、在学习回调函数之前我们是如何进行运算的
我们来看下面这段代码:
按照我们之前所学习的知识来讲的话就是应该这样写,每次选择都有着自己的逻辑,但是同时我们也可以看到当前红色选框内的代码非常的繁琐,基本没有差别的代码多次出现,显得整个代码极其的臃肿不堪,那么有没有什么办法来解决呢?
是的有的,使用回调函数的方式就可以解决:我们可以把函数的指针作为参数来进行传递使用函数指针接收,函数指针指向什么,函数就调用什么,这样就实现了回调函数的功能。
2、学习回调函数之后的运算
我们来看修改后的代码:
此时我们使用了一个回调函数calc将其中相同的过程打包进去,极大的简化了代码。
(当前代码仍旧有很多可以改进的地方,比如switch中的参数case必须是数字吗?暂时还没有学到的同学可以了解一下枚举)
三、源码
以下就是本次学习中所遇到的所有代码了:
制作不易,求各位未来的大牛给点点赞吧
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//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");
//}
//
//int main()
//{
// menu();
// int n = 1;
// int a = 0;
// int b = 0;
// int ret = 0;
// do
// {
// printf("请输入想要进行的操作:");
// scanf("%d", &n);
// switch (n)
// {
// case 1:
// printf("请输入要计算的两个数(以空格分割):");
// scanf("%d %d", &a, &b);
// ret = Add(a, b);
// printf("%d\n", ret);
// break;
// case 2:
// printf("请输入要计算的两个数(以空格分割):");
// scanf("%d %d", &a, &b);
// ret = Sub(a, b);
// printf("%d\n", ret);
// break;
// case 3:
// printf("请输入要计算的两个数(以空格分割):");
// scanf("%d %d", &a, &b);
// ret = Mul(a, b);
// printf("%d\n", ret);
// break;
// case 4:
// printf("请输入要计算的两个数(以空格分割):");
// scanf("%d %d", &a, &b);
// ret = Div(a, b);
// printf("%d\n", ret);
// break;
// case 0:
// printf("计算器已退出!");
// break;
// default:
// printf("输入不合法请重新输入:");
// }
// } while (n);
// 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 calc(int(*p)(int,int))
{
int a = 0;
int b = 0;
printf("请输入要计算的两个数(以空格分割):");
scanf("%d %d", &a, &b);
int ret = p(a,b);
printf("%d\n", ret);
}
void menu()
{
printf("这是一个菜单。\n");
}
int main()
{
menu();
int n = 1;
int a = 0;
int b = 0;
int ret = 0;
do
{
printf("请输入想要进行的操作:");
scanf("%d", &n);
switch (n)
{
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");
}
} while (n);
return 0;
}
标签:case,return,函数,int,ret,break,源码,放置,printf
From: https://blog.csdn.net/weixin_74202161/article/details/137169675