[C和指针]函数指针

一个单链表中查找值的简单程序:

Node *search_list(Node *node, int const value)
{
while(node != NULL)
{
if(node -> value == value)
break;
node
= node -> link;
}
return node;
}
它只能适用于值为整数的链表。

若使用函数指针,调用者编写函数用于比较两个值,然后把一个指向这个函数的指针作为参数传递给查找函数。

把函数类型声明为void *,表示一个“一个指向未知类型的指针”。

下面一个程序是查找函数与类型无关:

Node *search_list(Node *node,void const *value,
int (*compare)(void const *,void const *))
{
while(node != NULL)
         {
if(compare(&node -> value, value) == 0)
      
break;
    node
= node -> link;
}
return node;
}
一个比较函数示例:

int compare_ints(void const *a,void const *b)
{
if(*(int *)a == *(int *)b)
return 0;
else
return 1;
}
使用:

desired_node = search_list(root, &desired_value,compare_ints);

 

posted @ 2011-01-16 15:48  Chjun  阅读(276)  评论(0编辑  收藏  举报