C计算器来理解函数指针数组,函数指针,回调函数

想要实现一个简单的计算器
加减乘除
最原始方法:加减乘除分别用函数封装,然后再分别调用

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()
{
	int put = 0;
	int x = 0;
	int y = 0;
	int ret = 0;

	do {
		menu();
		printf("请选择>");
		scanf("%d", &put);
		switch (put) {
		case 1:
			printf("请输入两个操作数>");
			
			scanf("%d %d", &x, &y);
			ret = ADD(x,y);
			printf("%d\n", ret);
			break;
		case 2:
			printf("请输入两个操作数>");
			scanf("%d %d", &x, &y);
			 ret = Sub(x,y);
			printf("%d\n", ret);
			break;
		case 3:
			printf("请输入两个操作数>");
			
			scanf("%d %d", &x, &y);
		 ret = Mul(x, y);
			printf("%d\n", ret);
			break;
		case 4:
			printf("请输入两个操作数>");
			
			scanf("%d %d", &x, &y);
		 ret = Div(x, y);
			printf("%d\n", ret);
			break;
		case 0:
			printf("退出计算器\n");
			break;
		default:
			printf("选择错误重新选择>\n");
			break;
		}
	} while (put);

	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;
}
int main()
{
	int put = 0;
	int x = 0;
	int y = 0;
	int ret = 0;
	int(*arr[5])(int, int) = {NULL, ADD,Sub,Mul,Div };

	do {
		menu();
		printf("请选择>");
		scanf("%d", &put);
		if (put > 0 && put < 5)
		{
			printf("请输入两个操作数>");
			scanf("%d %d", &x, &y);
			ret = arr[put](x, y);
			printf("%d\n", ret);
		}else if(put==0)
		{
			printf("退出计算器");
		}
		else
		{
			printf("选择错误重新选择>\n");
		}
	} while (put);

	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 Col(int(*p)(int, int)) {
	int x = 0;
	int y = 0;
	int ret = 0;
	printf("请输入两个操作数>\n");
	scanf("%d %d", &x, &y);
	ret = p(x, y);
	printf("%d\n", ret);
}
int main()
{
	int put = 0;
	int x = 0;
	int y = 0;
	int ret = 0;

	do {
		menu();
		printf("请选择>");
		scanf("%d", &put);
		switch (put) {
		case 1:
			Col(ADD);
			break;
		case 2:
			Col(Sub);

			break;
		case 3:

			Col(Mul);

			break;
		case 4:
			Col(Div);

			break;
		case 0:
			printf("退出计算器\n");
			break;
		default:
			printf("选择错误重新选择>\n");
			break;
		}
	} while (put);

	return 0;
	}

你可能感兴趣的:(c语言,开发语言)