C回调函数基础用法

发布于:2025-07-17 ⋅ 阅读:(16) ⋅ 点赞:(0)

📌 定义:

回调函数是通过函数指针传递给另一个函数的函数,这个被传进去的函数将在某个时刻被“回调”调用。

换句话说:

  • 你定义一个函数 A

  • 把函数 A 的地址(即函数指针)作为参数传给函数 B

  • 函数 B 在合适的时机调用 A(即“回调”)

📍作用:

用于 “动态行为”插件机制自定义逻辑注入,非常常见于库函数、操作系统、图形界面、信号处理等场景。

回调函数 = 把函数指针作为参数传进去,在“合适时机”通过这个指针调用你传进去的函数。

 code

基础code

void menu()
{
	printf("********************\n");
	printf("****1.add****2.sub**\n");
	printf("****3.mul****4.div**\n");
	printf("****0.exit**********\n");
}
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;
}
int main()
{
	menu();
	int input = 0;
	int x = 0;
	int y = 0;
	int ret = 0;
	do
	{
		printf("输入计算类型->\n");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			printf("输入两个计算数字\n");
			scanf("%d %d", &x, &y);
			ret = add(x, y);
			printf("%d\n", ret);
			break;
		case 2:
			printf("输入两个计算数字\n");
			scanf("%d %d", &x, &y);
			ret = sub(x, y);
			printf("%d\n", ret);
			break;
		case 3:
			printf("输入两个计算数字\n");
			scanf("%d %d", &x, &y);
			ret = mul(x, y);
			printf("%d\n", ret);
			break;
		case 4:
			printf("输入两个计算数字\n");
			scanf("%d %d", &x, &y);
			ret = div(x, y);
			printf("%d\n", ret);
			break;
		default:
			printf("输入无效,请重新输入\n");
			break;
		}
	} while (input);
	return 0;
}

 回调函数示例--------减少冗余code

void menu()
{
	printf("********************\n");
	printf("****1.add****2.sub**\n");
	printf("****3.mul****4.div**\n");
	printf("****0.exit**********\n");
}
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 calcu (int(*pf)(int,int))
{
	int x = 0;
	int y = 0;
	int ret = 0;
	printf("输入两个计算数字\n");
	scanf("%d %d", &x, &y);
	ret = pf(x, y);
	printf("%d\n", ret);
} 
int main()
{
	menu();
	int input = 0;

	do
	{
		printf("输入计算类型->\n");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			calcu(add);
			break;
		case 2:
			calcu(sub);
			break;
		case 3:
			calcu(mul);
			break;
		case 4:
			calcu(div);
			break;
		default:
			printf("输入无效,请重新输入\n");
			break;
		}
	} while (input);
	return 0;
}

函数指针数组的调用形式

void menu()
{
	printf("********************\n");
	printf("****1.add****2.sub**\n");
	printf("****3.mul****4.div**\n");
	printf("****0.exit**********\n");
}
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;
}

int main()
{
	menu();
	int input = 0;
	int x = 0;
	int y = 0;
	int ret = 0;
	int (*arr[])(int, int) = { 0,add,sub,mul,div };
	printf("请输入计算类型->");
	do
	{
		scanf("%d", &input);
		if (input == 0)
		{
			printf("退出程序");
		}
		else if (input >= 1 && input <= 4)
		{
			printf("请输入两个操作数");
			scanf("%d %d", &x, &y);
		/*	for ( int i = 1; i < 5;  i++)
			{
				ret = arr[i](x, y);
				printf("%d \n", ret);

			}*/
			ret = arr[input](x, y);
			printf("%d \n", ret);
		}
		else
		{
			printf("输入错误,请重新输入");
		}
	} while (input);

	return 0;
}


网站公告

今日签到

点亮在社区的每一天
去签到