结构体的相互引用(mutual reference),就是说在多个结构体中,都包含指向其他结构体的指针。 1. 自引用 结构体 1.1 不使用typedef时 错误的方式: structtag_1{structtag_1 A;/*结构体*/intvalue; }; 这种声明是错误的,因为这种声明实际上是一个无限循环,成员b是一个结构体,b的内部还会有成员是结构体,依次下...
为了更好地理解结构体的自引用,我们可以以链表为例进行说明。链表是一种常见的数据结构,它由一系列节点组成,每个节点包含一个值和指向下一个节点的指针。在链表中,每个节点都是一个结构体,它的定义类似于下面的形式: ``` struct Node { int value; struct Node* next; }; ``` 在这个定义中,结构体Node包含...
自引用结构体指的是结构体内部包含指向自身类型的指针。这种结构体通常用于组织具有树形结构的数据。例如: ``` typedef struct TreeNode { int val; struct TreeNode* left; struct TreeNode* right; } TreeNode; ``` 这个结构体定义了一个二叉树节点,其中`left`和`right`分别指向左右子节点。这种自引用结构体...
结构体的相互引用(mutual reference),就是说在多个结构体中,都包含指向其他结构体的指针。 1. 自引用 结构体 1.1 不使用typedef时 错误的方式: struct tag_1{ struct tag_1 A; /* 结构体 */ int value; }; 这种声明是错误的,因为这种声明实际上是一个无限循环,成员b是一个结构体,b的内部还会有成员是...
仔细分析,其实是不行的,因为一个结构体中再包含一个同类型的结构体变量,这样结构体变量的大小就会无穷的大,是不合理的。 正确的自引用方式: struct Node{int data;struct Node* next;}; 是否可以使用匿名结构体呢? 在结构体自引用使用的过程中,夹杂了 typedef 对匿名结构体类型重命名,也容易引入问题,看看下面...
首先,结构体还没有定义完,编译器不知道结构体A需要多少空间存储,无法为成员b分配空间,另外成员b是一个完整的结构体,数据b中也会有一个结构体b1,而b1中同样有一个结构体b2……永无止境。 使用结构体自引用还需要注意以下一点: typedef struct { int a; ...
结构体的自引用(self reference),就是在结构体内部,包含指向自身类型结构体的指针。 结构体的相互引用(mutual reference),就是说在多个结构体中,都包含指向其他结构体的指针。 1. 自引用 结构体 1.1 不使用typedef时 错误的方式: struct tag_1 struct tag_1 A; /* 结构体 */ ...
2.结构体的自引用 此处,我们用一个例子来讲述我们来表述一个数据结构链表中的节点 struct Node { int data; struct Node*next; }; int main() { struct Node a = { 3, NULL }; struct Node b = { 5, &a }; printf("%d\n", b.data); ...
结构体的初始化 struct A{int i;char c;}a;struct B{int n;char e;struct A a;}b;int main(){struct A a = { 32,'a' };//直接初始化printf("%d\n%c\n", a.i, a.c);b.n = 64;b.e = 'b';//利用操作符“.”初始化b.a.i = 128;b.a.c = 'c';//结构自引用(结构嵌套)的...
结构体的自引用本质是结构体的递归定义,但是这会存在很大问题,如下面这个代码 struct node{int data;struct node next;} 在编译期间,编译器需要知道结构体变量大小为结构体变量分配空间,但是上述这个结构体我们仔细想一下会发现这个结构体无限递归,根本无法确定其大小,为解决上述问题,我们可以通过指针来间接引用结构体...