你真的了解回调函数吗?(文章最后放置源码)

一、什么是回调函数

简单来说就是通过函数指针调用的函数。

复杂一些呢就是说将函数的指针(地址)作为参数传递给另外一个函数使用,当这个指针被用来调用其指向的函数的时候被调用的函数就是回调函数。

二、回调函数怎么使用

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;
}

相关推荐

  1. C/C++了解

    2024-03-30 14:00:04       53 阅读
  2. 函数介绍

    2024-03-30 14:00:04       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-30 14:00:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-30 14:00:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-30 14:00:04       82 阅读
  4. Python语言-面向对象

    2024-03-30 14:00:04       91 阅读

热门阅读

  1. Go的数据结构与实现【LinkedList】

    2024-03-30 14:00:04       42 阅读
  2. 手写DNS服务器测速程序(工具分享)

    2024-03-30 14:00:04       57 阅读
  3. test6

    test6

    2024-03-30 14:00:04      46 阅读
  4. 成都某公司笔试题sql

    2024-03-30 14:00:04       46 阅读
  5. 2024年道路运输安全员考试真题题库

    2024-03-30 14:00:04       33 阅读
  6. 怎么在循环List的时候删除List的元素

    2024-03-30 14:00:04       36 阅读