内核链表


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

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

842584-20151124233430921-1191264818.jpg

 

下面是比较重要的函数:

842584-20151124233432827-875397475.jpg

 

 

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

842584-20151124233434202-1525294286.jpg

 

842584-20151124233436093-522054639.jpg

 

函数最后返回的是这个结构体节点起始地址。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);

 

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

842584-20151124233442421-1070540223.jpg

 

 

 





转载于:https://www.cnblogs.com/dchipnau/p/4993316.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值