You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 12:33:01