维基百科上关于链表的一小段代码看不懂,求解释
接口声明如下
- C/C++ code
#ifndef LLIST_H#define LLIST_H typedef void node_proc_fun_t(void*);typedef int node_comp_fun_t(const void*, const void*); typedef void LLIST_T; LLIST_T *llist_new(int elmsize);int llist_delete(LLIST_T*); int llist_node_append(LLIST_T*, const void*);int llist_node_prepend(LLIST_T*, const void*); int llist_travel(LLIST_T*, node_proc_fun_t*); int llist_sort(LLIST_T*, node_comp_fun_t*); void *llist_node_delete(LLIST_T*, node_comp_fun_t*, const void *key); void *llist_node_find(LLIST_T*, node_comp_fun_t*, const void *key); #endif
- C/C++ code
struct node_st { void *datap; struct node_st *next, *prev;}; struct llist_st { struct node_st head; int elmsize; int elmnr;};
- C/C++ code
void*llist_node_find(LLIST_T *ptr, node_comp_fun_t *comp, const void *key){ struct llist_st *me=ptr; struct node_st *curr; for (curr=me->head.next;curr!=&me->head;curr=curr->next) { if ( (*comp)(curr->datap, key) == 0 ) { return curr->datap; } } return NULL;}
我不理解的地方是:
- C/C++ code
typedef int node_comp_fun_t(const void*, const void*);
这一句是给int 起个别名?然后还用在了函数声明中,这个是什么意思
- C/C++ code
void *llist_node_find(LLIST_T*, node_comp_fun_t*, const void *key);
在 llist_node_find 函数中有这样一句
- C/C++ code
if ( (*comp)(curr->datap, key) == 0 )
好像用一个函数指针,调用那个“比较”函数?
[解决办法]
用typdef 申明一个类型
- C/C++ code
int foo(void); //申明一个函数{ typdef int foo_t(void); //申明一个函数类型 foo_t* f = &foo; // 定义一个foo_t*,即定义一个函数指针 return (*f)();}{ typdef int (*pfoo)(void); //申明一个函数指针类型 pfoo f = &foo;// 定义一个pfoo,即定义一个函数指针 return (*f)();}
[解决办法]
- C/C++ code
typedef int node_comp_fun_t(const void*, const void*);node_comp_fun_t *fun 等价于 int (*fun)(const void*, const void*);//node_comp_fun_t是别名, 代表的是一种类型