C++函数指针

2023-12-13 13:00:05

我们来分析一个函数指针的案例

首先area.h文件中进行定义

typedef void (*fDataManage)(int iAreaSign);    //fDataManage等价于类型 int (*)(int),int (*)(int)是类型名,fDataManage是别名
typedef struct kpMac_Area_Unit
	{
		int iAddrOffset;
		unsigned char btVal;
		unsigned char btMask;
	}Mac_Area_Unit;
typedef struct kpMAC_AREA
	{
		Mac_Area_Unit stMacAreaUnit[MAC_AREA_COUNT];
		fDataManage pDataManage;
	}MAC_AREA;

void SetDataManage(fDataManage p);

然后在area.c文件中需要进行变量初始化操作(将pDataManage 设置为NULL),并且对进行SetDataManage进行函数实现,设置要函数指针的具体值。

MAC_AREA g_stMacArea;

void InitMacArea()
{
	....
	for (i=0;i<MAC_AREA_COUNT;i++)
	{		
		..定义“g_stMacArea.stMacAreaUnit[i]”变量..
	}
	g_stMacArea.pDataManage = NULL;
}

void SetDataManage(fDataManage p)
{
	g_stMacArea.pDataManage = p;
}

然后可以在其他任意地方如(InitAxis.c)对函数进行调用(需要引入对应的头文件),并将AxisDataManage函数地址作为入参。

void InitAxis()
{
	SetDataManage(AxisDataManage);
}

void AxisDataManage(int iLoc)
{
	int i;
	for (i=0;i<MAC_LABEL_COUNT;i++)
	{
		if (g_stAxisDigitCtl.stAxisDigitCtlInner[i].iLocateArea == iLoc)
		{
						.....
		}
	}
}

以上的都是对函数指针进行了设置与定义,没有真正执行函数指针所指定的函数,接下来需要执行函数指针的函数如下:

在area.c文件中对指针函数进行调用实现:

void TransferPulse()
{
	...
	for ( i = 0; i < MAC_AREA_COUNT; i++)
	{
        ...
        g_stMacArea.pDataManage(i);
		...
	}
}

参考:

C语言指针进阶(一)——深入详解“函数指针”与“指针函数”-CSDN博客

文章来源:https://blog.csdn.net/qingxiao__123456789/article/details/134965068
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。