深入理解callback函数

回调函数是一个被作为参数传递的函数,常用于在处理相似事件时使用不同方法。SearchLinkTableNode函数中,通过SearchCondition这个回调函数来遍历链表并根据条件进行搜索。这种方法降低了代码耦合度,使得搜索功能更通用且易于实现。SearchCondition负责比较节点数据,返回匹配结果。
摘要由CSDN通过智能技术生成

什么是回调函数?

回调函数就是一个被作为参数传递的函数。回调函数就是允许用户把需要调用的函数的指针作为参数传递给一个函数,以便该函数在处理相似事件的时候可以
灵活的使用不同的方法。
其工作机制具体如下:
1.定义一个回调函数
2.提供函数实现的一方在初始化的时候,将回调函数的函数指针注册给调用者
3.调用者在程序中调用接口函数
当我们想通过一个统一接口实现不同内容的时候,亦或是所编写的函数必须能够在不同的时刻执行不同的类型的工作或者执行只能由函数调用者定义的工作,回调函数就是很好的实现手段。

使用回调函数有什么好处?

回调函数可以帮助降低代码耦合度。耦合性是程序结构中各个模块之间相互关联的度量。它取决于各个模块之间接口的复杂程度、调用模块的方式以及哪些信息通过接口。业务需求变换时,只需要修改或者增加回调函数,增加了代码的隔离性。

在Lab5.2的示例代码中,SearchLinkTableNode函数中,在遍历链表时,第二个参数运用到了回调函数SearchCondition,在SearchLinkTableNode中调用传入的回调函数:

tLinkTableNode * SearchLinkTableNode(tLinkTable *pLinkTable, 
                        int Condition(tLinkTableNode * pNode, void * args),
                        void * args)
{
    if(pLinkTable == NULL || Condition == NULL)
    {
        return NULL;
    }
    tLinkTableNode * pNode = pLinkTable->pHead;
    while(pNode != NULL)
    {    
        if(Condition(pNode, args) == SUCCESS)
        {
            return pNode;				    
        }
        pNode = pNode->pNext;
    }
    return NULL;
}

SearchCondition的定义如下:

int SearchCondition(tLinkTableNode * pLinkTableNode, void * args)
{
    char * cmd = (char*) args;
    tDataNode * pNode = (tDataNode *)pLinkTableNode;
    if(strcmp(pNode->cmd, cmd) == 0)
    {
        return  SUCCESS;  
    }
    return FAILURE;	       
}

通过这样的方法,对于链表的搜索函数,在实现过程中不需要去具体实现找到节点的方法,只要接收回调函数返回的是否匹配的信息即可,使得搜索函数的适用性更加广泛,实现起来也更加简单。

同样在示例代码中,主要分离了数据部分DataNode和链表的管理部分LinkTable,实现了接口分层。

作者:152

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值