【回调函数】

作者 : admin 本文共1553个字,预计阅读时间需要4分钟 发布时间: 2024-06-16 共1人阅读

1.回调函数是什么?

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

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

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

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
", ret);
}

int main()
{
    int input = 1;
    do
    {
        printf("*************************
");
        printf("  1:add           2:sub  
");
        printf("  3:mul           4:div  
");
        printf("********0. exit *********
");
        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("退出程序
");
            break;
        default:
            printf("选择错误
");
            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("*****************************
");
	printf("********1.add   2.sub********
");
	printf("********3.mul   4.div********
");
	printf("********   0.exit  **********
");
	printf("*****************************
");
}
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
",ret);
		}
		else if(input==0){
			printf("退出
");
		}
		else {
			printf("选择错误,重新选择");
		}
	} while (input);
	return 0;
}

本站无任何商业行为
个人在线分享 » 【回调函数】
E-->