结构体的自引用
struct SELF_REF1{
int a;
struct SELF_REF1 b;
int c;
}
这种类型的自引用是非法的,因为成员b是另一个完整的结构,其内部还将包含它自己的成员b。这第2个成员又是另一个完整的结构,它还将包括它自己的成员b。这样重复下去永无止境。这有点像永不会终止的递归程序。
struct SELF_REF2{
int a;
struct SELF_REF2 *b;
int c;
}
这个声明和前面那个声明的区别在于b现在是一个指针而不是结构。编译器在结构的长度确定之前就已经知道指针的长度,所以这种类型的自引用是合法的。
错误的例子:
typedef struct {
int a;
struct SELF_REF3 *b;
int c;
}SELF_REF3;
解决方案:
typedef struct SELF_REF3_TAG{
int a;
struct SELF_REF3_TAG *b;
int c;
}SELF_REF3;
struct SELF_REF1{
int a;
struct SELF_REF1 b;
int c;
}
这种类型的自引用是非法的,因为成员b是另一个完整的结构,其内部还将包含它自己的成员b。这第2个成员又是另一个完整的结构,它还将包括它自己的成员b。这样重复下去永无止境。这有点像永不会终止的递归程序。
struct SELF_REF2{
int a;
struct SELF_REF2 *b;
int c;
}
这个声明和前面那个声明的区别在于b现在是一个指针而不是结构。编译器在结构的长度确定之前就已经知道指针的长度,所以这种类型的自引用是合法的。
错误的例子:
typedef struct {
int a;
struct SELF_REF3 *b;
int c;
}SELF_REF3;
解决方案:
typedef struct SELF_REF3_TAG{
int a;
struct SELF_REF3_TAG *b;
int c;
}SELF_REF3;