在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
相关产品推荐
相关产品推荐

