分析如下结构体:
typedef struct _Ruler{
int color;
int length;
int material;
}StructRuler;
typedef struct _Pencil{
int color;
int length;
int material;
}StructPencil;
typedef struct _PencilBox{
StructRuler Ruler1;
StructRuler Ruler2;
StructPencil *Pencil1;
StructPencil *Pencil2;
}StructPencilBox;
StructPencilBox Box;
在铅笔盒的结构体中,有四个成员,分别是两把尺子和两支铅笔。使用Box分别去访问每个尺子成员中的成员变量没问题,但是访问铅笔成员中的成员变量时,可能会出现问题。
因为在Box结构体中,每个铅笔成员只占据了一个指针变量大小的空间,实际上每个铅笔成员需要占据整个铅笔结构体大小的空间。一个指针所占的空间和一个结构体所占的空间是有差距的,如果指针所占据的空间大于等于结构体的空间,程序从内存范围上讲没有问题,但是访问的结果可能会出错。如果指针占据的空间小于结构体的空间,则程序在内存范围上肯定会越界,出现异常。(一个指针 占据的空间和系统位数有关,=(sizeof(指针)))。
所以,在结构体嵌套使用时需注意,被嵌套的结构体不能使用指针,否则可能会出现上一级结构体因内存空间不够而导致异常。同时需要注意结构体的内存自动对齐。