实验使用sizeof关键字测量结构体大小的规则
查资料得到的规则如下
原则1、数据成员对齐规则:结构(struct或联合union)的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小的整数倍开始(比如int在32位机为4字节,则要从4的整数倍地址开始存储)。
原则2、结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部最大元素大小的整数倍地址开始存储。(struct a里存有struct b,b里有char,int,double等元素,那b应该从8的整数倍开始存储。)
原则3、收尾工作:结构体的总大小,也就是sizeof的结果,必须是其内部最大成员的整数倍,不足的要补齐。
unsigned char_size:1
char_size :1
int_size :4
float_size :4
double_size :8
typedef struct
{
unsigned char num01;
unsigned char num02;
unsigned char num03;
}Struct01;
//Struct01_size:3
// num01 num02 num03
typedef struct
{
unsigned char num01;
int num02;
}Struct02;
//Struct02_size:8
// num01 * * *
// num02 num02 num02 num02
typedef struct
{
int num01;
double num02;
}Struct03;
//Struct03_size:16
// num01 num01 num01 num01 * * * *
// num02 num02 num02 num02 num02 num02 num02 num02
typedef struct
{
int num01;
double num02;
char num03;
}Struct04;
//Struct04_size:24
// num01 num01 num01 num01 * * * *
// num02 num02 num02 num02 num02 num02 num02 num02
// num03 * * * * * * *
typedef struct
{
int num01;
double num02;
char num03;
char num04;
}Struct05;
//Struct05_size:24
// num01 num01 num01 num01 * * * *
// num02 num02 num02 num02 num02 num02 num02 num02
// num03 num04 * * * * * *
typedef struct
{
int num01;
double num02;
char num03;
char num04;
int num05;
}Struct06;
//Struct06_size:24
// num01 num01 num01 num01 * * * *
// num02 num02 num02 num02 num02 num02 num02 num02
// num03 num04 * * num05 num05 num05 num05
typedef struct
{
int num01;
double num02;
int num03[10];
int num04;
}Struct07;
//Struct07_size:64