关于一个结构体的疑问
经常在linux代码中看到如下封装的结构体:
typedef struct head
{
struct head *next;
struct head *front;
}head;
typedef struct file
{
head h;
int name;
int format;
}file;
file结构体都是通过head来链接起来的。file结构体的位置也需要通过计算head结构体的偏移位置才能得出。为啥不直接封装成下面的这个结构呢:
typedef struct file
{
int name;
int format;
file *next;
file *front;
}file;
[解决办法]
这个算是C中的一种“抽象”吧。
如果你仔细读过代码,你会发现所有的链表操作,都是针对head结构的,而所有类似file这样的链表,都是把head放在结构的开头,这样一来,所有head的指针,同时也是file的指针,file的指针也是head的指针。由于head的操作是单独抽象出来的,那么只要是想使用链表,只要把head放在你自己的结构中,就可以复用head操作(链表操作)的代码了。
可以读一读链表操作的代码,再读一读如何把某个file结构加到链表中,多用画画指针的指向,就明白为什么把head放在自定义struct的头部了。
[解决办法]