C语言 -- 函数指针数组的介绍及应用(转移表)

函数指针数组的介绍及其应用

函数指针数组

函数指针数组的大前提为数组,数组是存放相同类型数据的存储空间

例如:指针数组----存放指针的数组
int *arr[10]; //数组的每个元素都是int*类型

那么,要把一个函数存到一个数组中,这个数组就叫函数指针数组,

int (*parr[10]) ();

parr是一个数组,该数组有10个元素,每个元素都是int(*)()类型,即就是函数指针类型(指向一个无参数、返回值为int的函数的指针)。

函数指针数组的应用 – 转移表

转移表实现简易计算器:

#include <stdio.h>
#include <stdlib.h>
//计算器的实现
int ADD(int a, int b)
{
	printf("+");
	return a + b;
}
int SUB(int a, int b)
{
	printf("-");
	return a - b;
}
int MUL(int a, int b)
{
	printf("*");
	return a * b;
}
int DIV(int a, int b)
{
	printf("/");
	return a / b;
}
int MOD(int a, int b)
{
	printf("%%");
	return a % b;
}

void main()
{
	system("title 整数计算器"); //控制台的名字
	system("mode con cols=40 lines=30"); //控制台的大小

	int(*arr[5])(int a, int b) = { ADD,SUB,MUL,DIV,MOD }; //转移表

	int input = 1;
	while (input)
	{

		printf("****************************************\n");
		printf("***   [1] ADD              [2] SUB   ***\n");
		printf("***   [3] MUL              [4] DIV   ***\n");
		printf("***   [5] MOD              [0] OUT   ***\n");
		printf("****************************************\n");

		int a, b;
		printf("输入两个操作数:\n >");
		scanf_s("%d %d", &a, &b);
		printf("\n");

		int c;
		printf("想要进行的操作:\n >");
		scanf_s("%d", &input);
		printf("---------------------------------------\n");
		if (input > 5 || input < 0)
		{
			printf("输入有误!!请重新输入!\n");
			input = 1;
		}
		else if (input == 0)
			break;
		else
		{
			printf(" %d", a);
			int result = (*arr[input - 1])(a, b);
			printf("%d = %d\n\n", b, result);
		}

		system("pause");
		system("cls"); //控制台清屏
	}
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值