C语言链表定义的一些疑惑
刚学完C语言,最近在学数据结构,看的是《算法精解——C语言描述》。关于里面的链表的定义,有不懂的地方,希望有前辈能指点一下小白。
#ifndef LIST_H
#define LIST_H
#include <stdlib.h>
//定义链表结点
typedef struct ListElmt_
{
void *data;
struct ListElmt_ *next;
} ListElmt;
//定义链表
typedef struct List_
{
int size;
int (*math)(const void *key1, const void *key2);
void (*destory)(void *data);
ListElmt *head;
ListElmt *tail;
} List;
这里面int(*math)(const void *key1,const void *key2);
是用来干什么的啊,我有试过去掉也没什么影响啊
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
定义了一个函数指针math(更合适的名字应该是match吧?),接受两个
const void*实参
并返回int
。在原生列表中这么做的目的在于告诉用户应当如何处理match操作
,即定义了一个模板
。这里的意义在于告诉用户,比较函数不应该试图修改key,所以模板中是const void *。 如果你实现了如下函数:那么你可以让match指针指向该函数,并调用
->match
推荐一个教程系列,不妨看完再结合书本,理解起来容易很多。
http://study.163.com/course/c...
int(math)(const void key1,const void *key2);是一个函数指针,就跟库函数qsort一样需要传递一个比较函数指针作为如何排序使用。没有看到这个函数指针的实现,光从这个结构体定义来看根本无法推测。从经验上来说你链表接受的类型是void(任意的),那么该函数指针应该是用于查询链表位置的时候判断是否等于用的,因为不知道类型不能简单的使用==,需要传一个判断等于的函数指针判断是否相等,以上个人观点