结构体嵌套

分析如下结构体:

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(指针)))。

  所以,在结构体嵌套使用时需注意,被嵌套的结构体不能使用指针,否则可能会出现上一级结构体因内存空间不够而导致异常。同时需要注意结构体的内存自动对齐。

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值