C语言中结构体定义后声明的全局first指针有什么作用?
单链表全局头指针
first的作用说明 你给出的代码属于C语言结构体定义的简写语法,在结构体类型定义的末尾直接声明该类型的指针变量,等价于拆分后的两段代码:
// 定义链表节点的结构体类型 struct Node{ int data; struct Node *next; }; // 声明全局的链表头指针并初始化为空 struct Node *first = NULL;
核心作用
first是整个单链表的入口标识,用途包括:
- 指向单链表的第一个节点,所有遍历、增删改查操作都需要从这个指针出发,才能找到整个链表的所有节点
- 初始化为
NULL是用来明确标识当前链表处于空状态,还没有存储任何节点数据
常见使用场景
1. 链表遍历(对应你提到的显示功能)
void display_list() { // 从头指针开始遍历整个链表 struct Node *p = first; while (p != NULL) { printf("%d ", p->data); p = p->next; } }
2. 头插法新增节点
void insert_head(int val) { struct Node *new_node = malloc(sizeof(struct Node)); new_node->data = val; // 新节点的后继指向原第一个节点 new_node->next = first; // 更新头指针指向新的第一个节点 first = new_node; }
补充说明
这种全局头指针的写法适合小型Demo快速实现,无需每次调用链表操作函数时都传递头指针参数;但在大型项目中不推荐使用,全局变量可被任意代码修改,容易出现难以排查的野指针、数据篡改问题。
内容的提问来源于stack exchange,提问作者charan datt
相关产品推荐
相关产品推荐

