能不能一种链表中链接不同的类型呢,相应这种号召,内核链表诞生了。

内核链表之所以能够链接不同的类型的数据,是因为它和普通链表不一样,它链接的不是数据结构的起始地址,而是链接的该数据结构中的的list_head属性。

内核链表

 

下面是比较重要的函数:

内核链表

 

 

其他的都很简单,专门介绍一下list_entry函数:

内核链表

 

内核链表

 

函数最后返回的是这个结构体节点起始地址。Ptr是这个节点中list_head属性的地址,type是这个结构体节点的真实类型,member是这个结点中list_head属性的名字。

其中typeof关键字调用 0->member而没有出错,个人认为这是因为typeof并不对表达式求值,只是利用了其类型,所以不会出错。

 

可以使用如下方式调用:

Struct list_head * pos;

Struct student *tmp;

Tmp = list_entry(pos,struct list_head,pointer);

 

下面是一段标准使用代码:

内核链表

 

 

 





相关文章:

  • 2022-12-23
  • 2021-07-05
  • 2021-04-09
  • 2021-06-26
  • 2021-11-16
  • 2021-09-30
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-11-17
  • 2021-09-12
  • 2021-12-10
  • 2022-12-23
  • 2022-01-18
  • 2021-09-17
相关资源
相似解决方案