首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于一个构造体的疑问

2013-01-19 
关于一个结构体的疑问经常在linux代码中看到如下封装的结构体:typedef struct head{struct head *nextstr

关于一个结构体的疑问
经常在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的头部了。
[解决办法]

引用:
这个算是C中的一种“抽象”吧。

如果你仔细读过代码,你会发现所有的链表操作,都是针对head结构的,而所有类似file这样的链表,都是把head放在结构的开头,这样一来,所有head的指针,同时也是file的指针,file的指针也是head的指针。由于head的操作是单独抽象出来的,那么只要是想使用链表,只要把head放在你自己的结构中,就可以复用head操作(链表……

个人意见:这就是基类的思想。
C++只是一种面向对象的编程思想。
再抽象的编程语言,最后不都变成汇编代码了吗?我们完全可以说汇编语言是面向对象、脚本化、动态化、泛函化、并行化、分布化的语言。

热点排行