C函数指针应用之回调函数
2016-10-16 22:40
246 查看
C 函数指针 应用 之 回调函数:
回调顾名思义返回调用,一个函数(记为func1)将指向另一个函数(记为func2)的指针(记为pFunc2)作为参数(即函数指针),在func1函数体内,通过指针pFunc2返回到函数func2,完成函数func1对函数func2的调用;
举例说明:(注例子来源为《Pointers On C》之高级指针话题篇):下面是一个实现在单链表中查找给定值的函数:
Node * search_list (Node * node , int const value){
while (node !=NULL){
if (node->value==value)
break;
node = node->next;
}
return node;
}
局限性分析;该函数只能完成当链表存储的值为整型的时候的查找,而当链表的值为其他类型例如字符型的时候则无法完成,需要重新编写查找函数以适应新类型的链表;
解决办法(及实现查找函数的代码复用):;目的是使查找函数与链表的数据类型无关; 既然与类型无关,则数据的比较方式必然要改变(因为不同类型的数据的比较方式是不同的);对于具体数据类型值的比较当然要有具体的某一种适合当前数据类型的比较方式;这是毋庸置疑的;所以对于一种特定数据类型要编写具体的比较函数;(如整型需要编写整型比较的函数,字符型要编写字符型比较的函数);
使用函数指针当中介完成查找函数对比较函数的调用,此时将查找函数中的参数 value 改成指向value的指针,并将类型设定为void (即不确定类型),将比较函数的函数指针也作为参数传递给查找函数,这样查找函数即可实现对任何类型数据的查找,而需要具体实现的是比较函数;
下面是使用函数指针的代码:
Node * search_list (Node * node , void const* pValue,compare){
//pValue是指向value的指针,compare 是指向比较函数的函数指针
while (node !=NULL){
if (compare(&node->value , pValue)==0)
break;
node = node->next;
}
return node;
}
int 型的compare函数的实现:
int compare(void const *a ,
void const* pValue){
if (*(int *)a == *(int *)b) //必须先将void类型强制转换要比较的数据的数据类型;
return 0;
else
return 1;
}
这就是函数指针的应用;此例中的查找函数就被称为回调函数;
回调顾名思义返回调用,一个函数(记为func1)将指向另一个函数(记为func2)的指针(记为pFunc2)作为参数(即函数指针),在func1函数体内,通过指针pFunc2返回到函数func2,完成函数func1对函数func2的调用;
举例说明:(注例子来源为《Pointers On C》之高级指针话题篇):下面是一个实现在单链表中查找给定值的函数:
Node * search_list (Node * node , int const value){
while (node !=NULL){
if (node->value==value)
break;
node = node->next;
}
return node;
}
局限性分析;该函数只能完成当链表存储的值为整型的时候的查找,而当链表的值为其他类型例如字符型的时候则无法完成,需要重新编写查找函数以适应新类型的链表;
解决办法(及实现查找函数的代码复用):;目的是使查找函数与链表的数据类型无关; 既然与类型无关,则数据的比较方式必然要改变(因为不同类型的数据的比较方式是不同的);对于具体数据类型值的比较当然要有具体的某一种适合当前数据类型的比较方式;这是毋庸置疑的;所以对于一种特定数据类型要编写具体的比较函数;(如整型需要编写整型比较的函数,字符型要编写字符型比较的函数);
使用函数指针当中介完成查找函数对比较函数的调用,此时将查找函数中的参数 value 改成指向value的指针,并将类型设定为void (即不确定类型),将比较函数的函数指针也作为参数传递给查找函数,这样查找函数即可实现对任何类型数据的查找,而需要具体实现的是比较函数;
下面是使用函数指针的代码:
Node * search_list (Node * node , void const* pValue,compare){
//pValue是指向value的指针,compare 是指向比较函数的函数指针
while (node !=NULL){
if (compare(&node->value , pValue)==0)
break;
node = node->next;
}
return node;
}
int 型的compare函数的实现:
int compare(void const *a ,
void const* pValue){
if (*(int *)a == *(int *)b) //必须先将void类型强制转换要比较的数据的数据类型;
return 0;
else
return 1;
}
这就是函数指针的应用;此例中的查找函数就被称为回调函数;
相关文章推荐
- 重学C++Primer笔记9---回调函数与函数指针的应用
- 【转载】C++成员函数指针的应用,可作为回调函数实参
- C/C++高阶语法:函数指针及其应用,回调函数
- 回调函数(函数指针的应用)
- 数组转置(函数指针,回调函数)
- 【C语言提高10】【指针铁律】铁律4:应用指针必须和函数调用相结合(指针做函数参数)
- C/C++ 不带参数的回调函数 与 带参数的回调函数 函数指针数组 例子
- 011_C语言数组与指针间的转换及函数应用
- 函数指针与回调函数
- 函数指针与指针函数---应用为函数的回调
- 引用、指针和指向指针的指针在函数形参中的应用
- 结构体与函数指针的特殊应用
- 回调函数与函数指针
- 指针函数 、函数指针 、 回调函数
- 函数指针的应用学习Demo
- 10 函数指针 回调函数
- c++成员函数指针的应用
- delphi 中的函数指针 回调函数(传递函数指针,以及它需要的函数参数)
- 函数指针的简单应用2
- 函数指针应用・回调函数・转换表・