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)