[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);

 

你可能感兴趣的:(函数指针)