C语言结构体对齐

看了钱老师的C语言课,他讲的比较全面。说明我以前只是一知半解。

//1.各成员偏移值:
member offset % min(Zp,sizeof(member type)) == 0

//2.结构体自身对齐:
  结构体中最长字段:field
  StructAlign = min(Zp,field)
  Sizeof(结构体变量)%StructAlign == 0

//========================================================= 
//编译器:Zp = 8
struct tagStuInfo
{
   char    szName[5];   //member offset:0    ->占用8个字节
   float   fHeight;     //member offset:8    ->占用4个字节
   short   int wScore;  //member offset:12   ->占用4个字节
   int     nAge;        //member offset:16   ->占用4个字节
   char    cGender;     //member offset:20   ->占用4个字节
   double  dblWeight;   //member offset:24   ->占用8个字节
};//总长度:32字节
//=========================================================
//上述结构体,字段位置调整一下,如下:
//编译器Zp = 4
struct tagStuInfo
{
	float   fHeight;    //0
	double  dblWeight;  //4
	shor    int wScore; //12
	char    szName[5];  //14
	int     aAge;       //20
	char    cGender;    //24
};//总长度:28
//编译器Zp = 4
struct tagStuInfo
{
	float  fHeight;     //0
	double dblWeight;   //4
	shor   int wScore;  //12
	char   szName[5];   //14
	char   cGender;     //19
	int    nAge;        //20
};//总长度:24

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值