关于结构体自我嵌套的理解

本文探讨了C语言中结构体自我嵌套的概念,强调了struct LNode* next作为指针必须指向相同类型的结构体。内容详细分析了结构体在初始化时的空间分配情况,指出自我嵌套的结构体并不会无限套娃,而是需要逐层进行初始化或malloc操作来创建新的结构体实例。未进行初始化的next成员的后续指针将存在问题,而正确分配空间后的指针则能正常指向结构体。
摘要由CSDN通过智能技术生成

数据结构中链表的结构体

typedef struct LNode
{
   
	ElemType data;
	struct LNode* next;
}LinkNode;

其中struct LNode* next应理解为一种struct LNode类型的指针,它存放的是指向下一个struct LNode类型的地址,因为指针的赋值必须类型是相同的,比如:

int a = 6;
double* p = &a;

这种赋值是错误的,指针的赋值必须和a都是相同类型的数据,所以想要指向下一个相同结构体必须定义为struct LNode* next的形式。

关于空间的分配

LinkNode ss = {
    10 };
printf("%p\n", &ss.data);//00EFFB24
printf("%p\n", &ss.next);//00EFFB28
ss.next = (LinkNode*)malloc(sizeof(LinkNode));
printf("-----------------------------------------\n");
printf("%p\n", &ss.next);//00EFFB28

在ss初始化的时候ss.next就已经分配了空间,相当于给了ss一个malloc,ss.next里面应当存放一个struct LNode的地址。

但是他是不是不断地套娃循环?

LinkNode ss = {
    10 };
printf("%p\n", &ss.data);//0073FAB8
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值