C语言---list.h宏解读

本文介绍了C语言中list.h头文件的宏解读,重点讨论了list_entry宏的使用及功能,包括双链表的遍历、结构体成员地址转换等概念,并提供了相关示例进行演示。
摘要由CSDN通过智能技术生成

C语言—list.h宏解读

list.h学习篇

参考资料:

在我的linux系统的这个目录下有list.h文件

/usr/src/linux-headers-5.0.0-23/include/linux

  • 网上有许多关于list的文章

一、说明

测试运行需要使用linux系统。

1、我测试使用的不是linux系统里面的list.h文件,是一个简写版;具体的功能、函数和宏定义功能是一样的,可以说明这个文件的主要功能;(简写可以不在)

2、list.h主要是双链表的处理和应用,也有助于理解指针和宏定义;

3、在我的学生管理系统中:系统初始化的时候,将学生信息从文件中读取,处理,保存到结构体,“student”结构体就是使用list.h中的接口、宏处理的。

二、demo

demo主要是对这两个宏和list.h头文件中的函数和使用。应用和处理需要用到双链表。。。

#include <stdio.h>
#include <stdlib.h>
#include "slist.h"

typedef struct stu {
   
    char   name[30];
    int    age;
    struct list_head  list;
}stu;

struct list_head  *test_head;

int main(int argc, char *argv[]) {
   
    stu *pos = NULL;
    stu *next = NULL;
    
	//双链表头申请内存空间
    test_head = calloc(0, sizeof(struct list_head));
    
	//初始化双链表头
    INIT_LIST_HEAD(test_head);
    
	//准备结构体数据
    stu zhao = {
   "zhao", 1};
    stu qian = {
   "qian", 2};
    stu sun = {
   "sun", 3};
    stu li = {
   "li", 4};
    stu bao = {
   "bao", 5};
    
	//将结构体加入 test_head 的链表
    list_add(&(zhao.list), test_head);
    list_add(&(qian.list), test_head);
    list_add(&(sun.list), test_head);
    list_add(&(li.list), test_head);
    list_add(&(bao.list), test_head);
    
     //遍历双链表
    list_for_each_entry_safe(pos, next, test_head, list) {
   
        printf("name = %s, age = %d\n\n", pos->name, pos->age);
    }
    
	//删除双链表entry
    list_del(&bao.list);

    list_for_each_entry_safe(pos, next, test_head, list) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值