首先,有如下代码:
test.c
struct A{
int a;
struct B b;
};
struct B{
int b;
struct A a;
};
编译它:gcc -c test.c
会提示:
因为在定义struct A的时候,编译器检测不了struct B的长度,即占多少内存。
如果我们把代码改为:
struct A{
int a;
struct B *b;
};
struct B{
int b;
struct A a;
};
再次编译它:gcc -c test.c
这一次编译通过,因为在定义struct A的时候,struct B ×的长度是确定的(32位系统中任意类型的指针长度都为四个字节),因此后面定义struct B的时候它的长度也是确定的。
总结:其实所谓定义结构体就是定义某一长度的一种新的类型而已。