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

两种struct LinkedList指针声明的区别及使用疑问

两种链表指针声明的区别分析

先明确链表结构体定义:

struct LinkedList{
    int data;
    struct LinkedList *next;
};

两者核心差异

  • 声明1:struct LinkedList *current = malloc(sizeof(struct LinkedList));
    这行代码干了两件事:一是声明了一个指向struct LinkedList的指针current,二是立刻通过malloc给它分配了一块大小刚好匹配链表结构体的合法内存块。此时current指向的是一个完整可用的链表节点实例,你可以直接读写它的data和next成员,不会出问题。

  • 声明2:struct LinkedList *current;
    这行只做了一件事:声明了一个指针变量current,但完全没给它指定指向的内存——它的初始值是随机的(也就是常说的「野指针」)。如果直接去操作current->data或者current->next,本质是访问非法内存,必然导致程序崩溃、行为异常,这就是你用这种声明创建链表时达不到预期的原因。

链表创建里的正确使用姿势

如果用声明2的写法,必须补充分配内存的步骤,比如:

struct LinkedList *current;
// 先给指针分配合法内存,否则不能操作成员
current = malloc(sizeof(struct LinkedList));
// 记得判断内存分配是否成功,避免空指针问题
if (current == NULL) {
    // 这里可以加内存分配失败的处理逻辑,比如报错退出
    return;
}
current->data = 5;
current->next = NULL;

内容的提问来源于stack exchange,提问作者Data Scientist to be

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 05:58:12