【回调函数】

1.回调函数是什么?

回调函数就是⼀个通过函数指针调用的函数。
如果你把函数的指针(地址)作为参数传递给另⼀个函数当这个指针被用来调用其所指向的函数
时,被调用的函数就是
回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发⽣时由另外的⼀方调用的,用于对该事件或条件进⾏响应。
只有调⽤函数的逻辑是有差异的,我们可以把调⽤的函数的地址以参数的形式传递过去,使⽤函数指针接收,函数指针指向什么函数就调⽤什么函数,这⾥其实使⽤的就是回调函数的功能。

接下来是一个简易计算器(利用回调函数)

#include <stdio.h>
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;
}

void calc(int(*pf)(int, int))
{
    int x, y;
    int ret = 0;
    printf("输入操作数:");
    scanf("%d %d", &x, &y);
    ret = pf(x, y);
    printf("ret = %d\n", ret);
}

int main()
{
    int input = 1;
    do
    {
        printf("*************************\n");
        printf("  1:add           2:sub  \n");
        printf("  3:mul           4:div  \n");
        printf("********0. exit *********\n");
        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;
}

图 

下面是改造后的方法(利用数组函数进行优化,方便,减少冗余)

//加法
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;
}
//菜单
void menu()
{
	printf("*****************************\n");
	printf("********1.add   2.sub********\n");
	printf("********3.mul   4.div********\n");
	printf("********   0.exit  **********\n");
	printf("*****************************\n");
}
int main()
{
	int* (*pfArr[])(int, int) = {NULL,add ,sub,mul,div};//函数指针数组,存放函数
	int input = 0;
	int x = 0;
	int y = 0;
	int ret = 0;
	do {
		menu();
		printf("请选择");
		scanf("%d", &input);
		if (input >= 1 && input <= 4) {
			printf("请输入两个操作数:");
			scanf("%d %d", &x, &y);
			ret = pfArr[input](x, y);//这里进行调用函数数组里面的函数
			printf("%d\n",ret);
		}
		else if(input==0){
			printf("退出\n");
		}
		else {
			printf("选择错误,重新选择");
		}
	} while (input);
	return 0;
}

相关推荐

  1. 函数详解

    2024-06-09 16:44:04       40 阅读
  2. ajax函数

    2024-06-09 16:44:04       10 阅读
  3. 函数(Language C)

    2024-06-09 16:44:04       27 阅读
  4. 函数的介绍

    2024-06-09 16:44:04       21 阅读
  5. C++ 函数指针与函数

    2024-06-09 16:44:04       24 阅读
  6. C 函数指针与函数

    2024-06-09 16:44:04       14 阅读

最近更新

  1. LlamaInde相关学习

    2024-06-09 16:44:04       0 阅读
  2. LeetCode每日一题 分发糖果

    2024-06-09 16:44:04       0 阅读
  3. 刷算法Leetcode---9(二叉树篇Ⅲ)

    2024-06-09 16:44:04       0 阅读
  4. 【GC 死亡对象判断】

    2024-06-09 16:44:04       0 阅读
  5. [ABC275A] Find Takahashi 题解

    2024-06-09 16:44:04       0 阅读
  6. 洛谷 P2141 [NOIP2014 普及组] 珠心算测验

    2024-06-09 16:44:04       0 阅读
  7. 微软edge浏览器全解析

    2024-06-09 16:44:04       0 阅读

热门阅读

  1. es6 proxy的作用和用法

    2024-06-09 16:44:04       10 阅读
  2. 简单记录个python国内镜像源

    2024-06-09 16:44:04       11 阅读
  3. Spring Boot配置MySQL数据库连接数

    2024-06-09 16:44:04       14 阅读
  4. vue路由缓存

    2024-06-09 16:44:04       11 阅读
  5. 力扣第185题:部门工资前三高的员工

    2024-06-09 16:44:04       9 阅读
  6. 手机UI设计中的按钮状态包含哪几种

    2024-06-09 16:44:04       8 阅读