
结构的自引用(自我引用),位于结构内部,包含指向其自身结构的指针
结构的相互引用,即多个结构包含指向其他结构的指针.
1.1不使用typedef时

错误的方式:
1 struct tag_1{ 2 struct tag_1 A; /* 结构体 */ 3 int value; 4 };
这种声明是错误的,因为这种声明实际上是一个无限循环,成员b是一个结构结构体,并且在b的结构内部将有一个成员,进而是无线循环. 分配内存时,由于无限嵌套而无法确定此结构的长度结构体,因此此方法是非法的.

正确的方法: (使用指针):
1 struct tag_1{ 2 struct tag_1 *A; /* 指针 */ 3 int value; 4 };
由于确定了指针的长度(在32位计算机上,指针的长度为4),因此编译器可以确定结构的长度.

1.2使用typedef时
错误的方式:
1 typedef struct { 2 int value; 3 NODE *link; /* 虽然也使用指针,但这里的问题是:NODE尚未被定义 */ 4 } NODE;

此处的目的是使用typedef为该结构创建别名NODEP. 但这是错误的,因为类型名称的范围从语句的末尾开始,并且由于尚未定义,因此不能在结构内部使用.
正确的方法: 有三种,相差不大,可以使用任何一种.
1 /* 方法一 */ 2 typedef struct tag_1{ 3 int value; 4 struct tag_1 *link; 5 } NODE; 6 7 8 /* 方法二 */ 9 struct tag_2; 10 typedef struct tag_2 NODE; 11 struct tag_2{ 12 int value; 13 NODE *link; 14 }; 15 16 17 /* 方法三 */ 18 struct tag_3{ 19 int value; 20 struct tag *link; 21 }; 22 typedef struct tag_3 NODE;
错误的方式:
1 typedef struct tag_a{ 2 int value; 3 B *bp; /* 类型B还没有被定义 */ 4 } A; 5 6 typedef struct tag_b{ 7 int value; 8 A *ap; 9 } B;
错误原因与上面相同,其中在定义类型B之前就使用了它.
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-208467-1.html
下次再来就撞击
打倒美帝国主义
卿言是也
没看到物价下降