c语言----自定义类型---结构体(声明、重命名、对齐规则、传参、位段...详解)-四、结构体的自引用

在结构中包含⼀个类型为该结构本⾝的成员是否可以呢?
比如,定义一个链表的节点:

struct Node
{
 int data;
 struct Node next;
};

上述代码正确吗?如果正确,那 sizeof(struct Node) 是多少?
仔细分析,其实是不行的,因为⼀个结构体中再包含⼀个同类型的结构体变量,这样结构体变量的大小就会无穷的大,是不合理的。
正确的自引用方式:

//结构体的自引用
typedef struct node
{
	char i;
	struct node* next;
}node;

在结构体⾃引⽤使⽤的过程中,夹杂了 typedef 对匿名结构体类型重命名,也容易引⼊问题,看看
下⾯的代码,可行吗?

typedef struct
{
	char i;
    node* next;
}node;

答案肯定是不行滴:
因为Node是对前面的匿名结构体类型的重命名产生的,但是在匿名结构体内部提前使用Node类型来创建成员变量,这是不行的。
解决方案如下:定义结构体不要使用匿名结构体了:

typedef struct node
{
 char i;
 struct Node* next;
}node;
上一篇:手机无线投屏到windows11电脑


下一篇:HTTP和HTTPS谁传输数据更安全?-1.HTTP