函数指针数组应用


前言

函数指针数组又叫转移表,函数指针数组本质是一个数组,数组每个元素是指针,每个指针指向的是函数


一、函数指针数组的定义

函数指针数组的定义形如:int (*p[10])(int)。
首先p[10]是一个数组,数组与*结合,就变成了指针数组,这个指针数组有10个元素,每个元素指向一个函数,函数的形参为int类型,函数的返回值为int类型。

二、使用步骤

方法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; }
int main()
{
 int x, y;
 int input = 1;
    int ret = 0;
    do
   {
        printf( "*************************\n" );
        printf( " 1:add           2:sub \n" );
        printf( " 3:mul           4:div \n" );
        printf( "*************************\n" );
        printf( "请选择:" );
        scanf( "%d", &input);
        switch (input)
       {
        case 1:
              printf( "输入操作数:" );
              scanf( "%d %d", &x, &y);
              ret = add(x, y);
              printf( "ret = %d\n", ret);
              break;
        case 2:
              printf( "输入操作数:" );
              scanf( "%d %d", &x, &y);
              ret = sub(x, y);
              printf( "ret = %d\n", ret);
              break;
        case 3:
              printf( "输入操作数:" );
              scanf( "%d %d", &x, &y);
              ret = mul(x, y);
              printf( "ret = %d\n", ret);
              break;
        case 4:
              printf( "输入操作数:" );
              scanf( "%d %d", &x, &y);
              ret = div(x, y);
              printf( "ret = %d\n", ret);
              break;
        case 0:
                printf("退出程序\n");
 breark;
        default:
              printf( "选择错误\n" );
              break;
       }
 } while (input);
    
    return 0; }

方法2

代码如下(示例):

#include<stdio.h>
void menu()
{
	printf("*************************\n");
	printf(" 1.add             2.sub \n");
	printf(" 3.mul             4.div \n");
	printf("*********0.exit.*********\n");
	printf("请选择要进行的运算:");
}
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 Dvi(int a, int b)
{
	return a / b;
}
int main()
{
	int input,ret,a,b;
	int (*p[5])(int, int) = { 0,Add ,Sub,Mul,Dvi };
	do
	{
		menu();
		scanf("%d", &input);
		printf("请输入要计算的两数:");
		scanf("%d%d", &a, &b);
		if (input >= 1 && input <= 4)
		{
			ret = p[input](a, b);
			printf("两数的运算结果为:%d\n", ret);
		}
		else if (input == 0)
			printf("退出\n");
		else printf("选择错误请重新选择\n");

	} while (input);
}

总结

运用函数指针数组进行±*/运算更加简洁,当需要添加一个运算时,我们只需将函数指针数组多指向一个函数即可,而不用像方法1那样继续敲写一个case语句

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值