多文件中的结构体相互嵌套
结构体可在多文件中重复声明多次(如"a.h"和"b.h"中都含有 struct st),所以可以有如下形式:
a.h:
struct st1;
struct st2;
b.h:
struct st1;
struct st2;
a.c:
#include "a.h"
struct st1
{
int a;
struct st2 st2;
};
b.c:
#include "b.h"
struct st2
{
int b;
struct st1 st1;
};
这样写的结果就是编译时会报错。
报错的原因:系统在编译过程(就是形成可执行文件的过程)中,会判断结构体的大小并赋予其空间,然而若写成上述结构体嵌套的形式,系统会无法判断结构体的具体大小,从而无法分配空间。
解决方法:既然报错的原因是无法赋予具体大小的空间,那么让空间变得可以计算即可。
struct st1
{
int a;
struct st2* st2;
};
struct st2
{
int b;
struct st1* st1;
};
采用具有确定空间大小的指针,便可以避免报错。