读书人

维基百科下关于链表的一小段代码看不懂

发布时间: 2012-10-28 09:54:44 作者: rapoo

维基百科上关于链表的一小段代码看不懂,求解释
接口声明如下

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是别名, 代表的是一种类型 

读书人网 >C语言

热点推荐