结构的自引用:
struct self_ref{
int a ;
struct self_ref b;
int c ;
};
上面的自引用是非法的,因为成员b是一个完整的结构,器内部还将包含它自己的成员b.这样会导致无限重复包含自身.
struct self_ref{
int a;
struct self_ref *b ;
int c ;
};
这个自引用是合法的.因为成员b不是一个结构,而是一个指向结构的指针.编译器在结构的长度确定之前就已经知道指针的长度了,所以这种类型的指针是合法的.
陷阱:
typedef struct{
int a;
self_ref *b ;
int c ;
} self_ref ;
这个声明的目的是为结构创建类型名self_ref ,但是在结构声明的内部,它还未定义.
可以定义一个结构标签来声明b:
typedef struct self_ref{
int a ;
struct self_ref *b;
int c ;
}self_ref;