函数指针
函数指针最常见的两个用途:
- 转换表(jump table)
- 作为参数传给另一个函数
函数名在使用时总是由编译器将它转换为函数指针
回调函数
这里有一个简单的函数:
Node * search(Node* node,int const value)
{
while(node!=null)
{
if(node->value == value)
break;
node=node->next;
}
return node;
}
这个函数只能够查找int型的value值,一种更为通用的方法是使查找函数与类型无关,这样它就能适用于绝大多数的链表。调用者编写一个函数用于比较两个值,然后把指向这个函数的指针作为参数传递给查找函数,然后查找函数调用这个函数来进行数值比较,这样可以实现任何数据类型的比较。
修改:
Node * search(Node* node,void const *value,
int (*copmare)(void const*,void const*))
{
while(node!=null)
{
if(compare(node->value, value)==0)
break;
node=node->next;
}
return node;
}
int compare_int(void* a, void* b)
{
if(*(*int)a==*(*int)b)
return 0;
else
return 1;
}
result=search(root,value,compare_int);