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);
...
}
}
参考:
文章来源:https://blog.csdn.net/qingxiao__123456789/article/details/134965068
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!