C语言指针进阶二:(函数指针数组,转移表)

函数指针数组

函数指针数组就是存放函数指针的一个数组,数组里都是函数指针,那么该怎么定义:

cs 复制代码
int (*parr[10])();

因为 [] 的优先级高于 * ,所以parr先与 [] 结合说明是一个数组,元素类型是 int(*)() 的函数指针。

函数指针数组的用途:转移表

转移表的基础列子:实现计算器

cs 复制代码
#include<stdio.h>
//函数指针数组创建的简易计算器,又称转移表

void meau()
{
	printf("******************\n");
	printf("*** 1:add 2:sub***\n");
	printf("*** 3:mul 4:div***\n");
	printf("*** 0.exlt     ***\n");
	printf("******************\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 input = 0;
	int (*parr[])(int, int) = { 0, add, sub, mul, div };//存放函数指针的数组
	int x = 0, y = 0, ret = 0;
	do
	{
		meau();
		printf("请选择:");
		scanf("%d", &input);
		if (input == 0)
		{
			printf("退出计算器\n");
		}
		else if(input <= 4 && input >= 1)
		{
			printf("请输入两个数:");
			scanf("%d %d", &x, &y);
			ret = parr[input](x, y);
			printf("ret = %d\n", ret);
		}
		else
		{
			printf("输入错误,重新输入\n");
		}
	} while (input);
}

源代码如上,因为 加减乘除 四个函数的类型相同,所以可以把他们存放到一个数组里,通过数组下标访问函数来调用函数,这样会比普通的计算器代码简便许多,减少了许多代码。

指向函数指针数组的指针

这不是必须学会的,但是理解了可以提升自己。

指向函数指针数组的指针该怎么定义?

cs 复制代码
int(*parr[5])(int,int);//函数指针数组



int(*(*pfun)[5])(int,int);//指向函数指针数组的指针

剩下的是函数指针数组,pfun与*结合说明是指针。

相关推荐
luckys.one1 小时前
第9篇:Freqtrade量化交易之config.json 基础入门与初始化
javascript·数据库·python·mysql·算法·json·区块链
~|Bernard|2 小时前
在 PyCharm 里怎么“点鼠标”完成指令同样的运行操作
算法·conda
战术摸鱼大师2 小时前
电机控制(四)-级联PID控制器与参数整定(MATLAB&Simulink)
算法·matlab·运动控制·电机控制
Christo32 小时前
TFS-2018《On the convergence of the sparse possibilistic c-means algorithm》
人工智能·算法·机器学习·数据挖掘
鹿鹿学长3 小时前
2025年全国大学生数学建模竞赛(C题) 建模解析|婴儿染色体数学建模|小鹿学长带队指引全代码文章与思路
c语言·开发语言·数学建模
好家伙VCC3 小时前
数学建模模型 全网最全 数学建模常见算法汇总 含代码分析讲解
大数据·嵌入式硬件·算法·数学建模
伴杯猫3 小时前
【ESP32-IDF】基础外设开发2:系统中断矩阵
c语言·单片机·嵌入式硬件·mcu·物联网·github
liulilittle5 小时前
IP校验和算法:从网络协议到SIMD深度优化
网络·c++·网络协议·tcp/ip·算法·ip·通信
Want5956 小时前
C/C++圣诞树①
c语言·开发语言·c++
bkspiderx7 小时前
C++经典的数据结构与算法之经典算法思想:贪心算法(Greedy)
数据结构·c++·算法·贪心算法