以打印双向链表方法dlist_print函数为例
typedef struct _DListNode
{
struct _DListNode* prev;
struct _DListNode* next;
void* data;
}DListNode;
struct _DList
{
DListNode* first;
};
typedef struct _DList DList;
定义函数指针类型:
typedef void (*DListDataPrintFunc)(void* data);
声明dlist_print函数:
void dlist_print(DList* thiz, DListDataPrintFunc print);
实现dlist_print函数:
void dlist_print(DList* thiz, DListDataPrintFunc print)
{
DListNode* iter = thiz->first;
while(iter != NULL)
{
print(iter->data);
iter = iter->next;
}
return;
}
调用方法
static void print_int(void* data)
{
printf("%d ", (int)data);
return;
}
…
dlist_print(dlist, print_int);
调用者如何提供函数给dlist_print呢?当然是通过函数指针了。变量指针指向的是一块数据,
指针指向不同的变量,则取到的是不同的数据。函 数指针指向的是一段代码(即函数),
指针指向不同的函数,则具有不同的行为。函数指针是实现多态的手段,多态就是隔离变化
的秘诀,这里只是一个开端。