一、结构体的相关知识:
1、定义结构体类型,只说明该类型的组成情况,并没有分配内存空间。只有当定义属于结构体类型的变量时,系统才会分配空间给该变量。
2、结构体定义类型中不允许对结构体本身的递归定义。
3、结构体定义中可以包含另外的结构体,即结构体是一嵌套的。
4、结构体变量可以在定义时进行初始化赋值。
例如:struct person{
char name[20];
char sex;
}girl1={“tangtang”,’F’};
二、共用体的相关知识:
1、结构体和共用体都是由多个不同的数据类型成员组成,但在任一时刻,共用体中只存放了一个被选中的成员,而结构体的所有成员都存在。对于共用体的不同成员赋值,将会对其他成员重写,原来成员的值就不存在了,而对于结构体的不同成员赋值是互不影响的。
2、共用体占用内存为个成员中占用最大者内存。而结构体占用内存与具体的sizeof有关。
三、枚举的相关知识:
1、对于枚举中,如果不给枚举常量赋初值,编译器会为每一个枚举量赋一个不同的整型值,第一个为0,第二个为1等。当枚举表中某个常量赋值后,其后的成员则按一次加1的规则确定其值。
四、sizeof的计算:
1、sizeof(int):4; short:2;;long:4;float:4;double:8;char:1; 指针:4;
2、struct的空间计算:
(1)整体空间时占用空间最大的成员(的类型)所占字节的整数倍。
(2)整数对齐原则——内容按结构体成员的先后顺序排序,当排到该成员变量时,其前面已摆放的空间大小必须是该成员类型大小的整数倍,如果不够则补齐。
例如:
struct s1{
char a;
double b;
int c;
char d;
};
struct s2{
char a;
char b;
int c;
double d;
};
cout<
pragma pack(n),n为字节对齐数,其取值为1、2、4、8、16等,默认为8。如果这个值比结构体成员的sizeof值小,那么该成员的偏移量应该以此值为准。
4、空结构体的大小不为0,为1。
5、共用体(Union)的sizeof就是每个成员sizeof的最大值。
6、枚举类型的sizeof为4。