callback function回调函数
时间:2010-03-14 来源:liw1029
定义:
将一个函数指针作为参数传递给其他函数,后者将“回调”函数指针指向的函数。
int (*func_p)(void *arg1, void *arg2);//定义一个函数指针;
例如:
在单链表中查找一个值
Node *search_list(Node *node, int const value)
{
while(node != NULL)
{
if (node->value == value)
{
break;
}
else
{
node = node->next;
}
}
return node;
}
这个函数的缺点是只能用在查找值为整数的链表中,如果你要在一个字符串链表中查找,就不能用这个函数了,只能重新写一个。怎么才能使查找函数与类型无关呢?使用函数指针。
Node *search_list(node *node, void *value, int (*compare)(void *, void *))
{
while (node != NULL)
{
if (0 == compare(&(node->value), value))
{
break;
}
else
{
node = node->next
}
}
return node;
}
如果是一个整形的链表,你可以这样写比较函数
int compare_int(void *a, void *b)
{
if (*(int *)a == *(int *)b)\
{
return 0;
}
else
{
return 1;
}
}
这样使用它:
result_node = search_list(node, *value, compare_int);
说明:关于函数和函数指针
int func(int);
int (*func_p)(int) = &func; int (*func_p)(int) = func;//效果是一样的,因为函数在被使用的时候总是由编译器把它转换为函数指针。
可以有三种方式使用:
int ret;
ret = func();
ret = func_p();
ret = (*func_p)();
详细内容请参考《c和指针》一书
将一个函数指针作为参数传递给其他函数,后者将“回调”函数指针指向的函数。
int (*func_p)(void *arg1, void *arg2);//定义一个函数指针;
例如:
在单链表中查找一个值
Node *search_list(Node *node, int const value)
{
while(node != NULL)
{
if (node->value == value)
{
break;
}
else
{
node = node->next;
}
}
return node;
}
这个函数的缺点是只能用在查找值为整数的链表中,如果你要在一个字符串链表中查找,就不能用这个函数了,只能重新写一个。怎么才能使查找函数与类型无关呢?使用函数指针。
Node *search_list(node *node, void *value, int (*compare)(void *, void *))
{
while (node != NULL)
{
if (0 == compare(&(node->value), value))
{
break;
}
else
{
node = node->next
}
}
return node;
}
如果是一个整形的链表,你可以这样写比较函数
int compare_int(void *a, void *b)
{
if (*(int *)a == *(int *)b)\
{
return 0;
}
else
{
return 1;
}
}
这样使用它:
result_node = search_list(node, *value, compare_int);
说明:关于函数和函数指针
int func(int);
int (*func_p)(int) = &func; int (*func_p)(int) = func;//效果是一样的,因为函数在被使用的时候总是由编译器把它转换为函数指针。
可以有三种方式使用:
int ret;
ret = func();
ret = func_p();
ret = (*func_p)();
详细内容请参考《c和指针》一书
相关阅读 更多 +