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

在C语言中,为何要在含自引用指针的结构体变量前加*号?

C语言中两种结构体声明的区别分析

先看你给出的两段代码:

struct node
{
    int data;
    char age;
} temp;

// versus
struct node
{
    int data;
    struct node* next;
} *temp;

这两段代码都是「结构体类型定义+变量声明」的组合写法,但核心区别体现在结构体的用途和声明的temp变量类型上:

  • 第一段代码

    • 定义的struct node是普通自定义数据类型,成员为int data和char age,和链表实现没有关联
    • 末尾的temp是**struct node类型的普通变量**,它直接存储该结构体的所有数据,占用内存大小为int + char的总大小(实际可能因内存对齐略有增加)
  • 第二段代码

    • 定义的struct node是标准的链表节点结构:成员struct node* next是指向同类型结构体的指针,通过这个指针可以将多个struct node节点串联起来,形成链式存储结构
    • 末尾的*temp是指向struct node类型的指针变量,它本身仅占用一个指针的内存空间(32位系统为4字节,64位系统为8字节),用于存储某个struct node节点的内存地址,通常在链表操作中用作临时遍历指针或节点指针

补充说明:如果要实现链表,必须使用第二种结构体定义——只有包含指向自身类型的指针,才能实现节点间的链接。第一段的结构体只是普通自定义类型,无法用于构建链表。

内容的提问来源于stack exchange,提问作者SAMRAT PATEL

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 14:40:28