运算器的特殊实现方法

【理论分析篇】

    首先我们先来看这样的几句代码:

    

int *fun(int,int);
int (*pfun)(int,int);
int (*ppfun[5])(int,int);
int (*(*pppfun)[5])(int,int);

     看到这几句代码,是不是感觉要晕啦!不过不要怕!我们开始一句一句的分析:

     .int *fun(int,int)

     是一个有两个整形参数的函数,而且它的返回值是int *类型的.

1.函数指针

    .int (*pfun)(int,int)

    .是一个函数指针,顾名思义,首先它是一个指针,指向的是一个函数,从本质上说它就是函数的指针;函数指针就是一个指针它的返回值类型为int,而且它具有两个整形的参数.

2.函数指针数组

   .int(*ppfun[5])(int,int)

   .是函数指针数组,我们可以发现这句代码相对于第二句代码多了一个代表数组标志的方括号,这是函数指针数组与函数指针的区别之一,函数指针数组就是数组中的每一个元素都是指向函数的指针.

3.指向函数指针数组的指针

  .int(*(*pppfun)[5])(int,int)

  .是指向函数指针数组的指针,在本质上依然是个指针,这个指针指向的是一个数组,数组里面存放的是函数指针,不过它是指向函数指针数组的指针.

【理论实践篇】

 函数指针的使用范例

     实现一个运算器,包括加法,减法,乘法和除法,使用函数指针

     我们知道函数指针就是指向函数的指针,我们可以通过传不同参数的地址实现不同的功能,代码实现如下:

    

void menu()
{
	printf("**0.退出**\n");
	printf("**1.加法**\n");
	printf("**2.减法**\n");
	printf("**3.乘法**\n");
	printf("**4.除法**\n");
}

int Add(int num1, int num2) //加法
{
	return num1+num2;
}

int Sub(int num1, int num2)  //减法
{
	return num1-num2;
}

int Mul(int num1, int num2)  //乘法
{
	return num1*num2; 
}

int Div(int num1, int num2)   //除法
{
	if(num2 != 0)  //判断除数是否是零
		return num1/num2;
	return 0;
}

int Operate(int (*pfun)(int , int))  //函数指针
{
	int num1 = 0;
	int num2 = 0;
	printf("请输入两个操作数>:");
	scanf("%d%d",&num1, &num2);
	return pfun(num1, num2);
}

int (*arr[5])(int , int) = {0, Add, Sub, Mul, Div}; //转移表

int main()
{
	int ret=0;
	int input = 1;
	while(input)
	{
		menu();
		printf("请选择你要进行的操作>:");
		scanf("%d",&input);
		if(input>= 1 && input<= 4)
		{
			ret = Operate(arr[input]);
			printf("操作后的结果为:%d\n", ret);
		}
		else if(input == 0)
		{
			system("pause");
			return 0;
		}
		else
		{
			printf("选择错误\n");
		}
	}
	system("pause");
	return 0;
}

   以上代码实现中并没有添加头文件,读者可自行添加,以上就是我个人对函数指针,函数指针数组和指向函数指针数组的指针的理解,如果有完美的地方请大家指出。

  

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值