c++结构体、共用体和枚举
结构体类型
c++中的结构体成员既可以是数据,也可以是函数
c语言中定义结构体变量必须加struct(这也是很多时候和typedef),但是在c++里面,可以不加
结构体和类的不同在于,结构体中的变量默认是public类型,而类则默认是private
struct空间计算:
1)整体空间是占用空间最大成员(类型)的整数倍,但是在linux +c++环境下,如果最大成员类型占据的字节书超过4,那么整体空间是4的倍数即可。
2)数据对齐原则,内存按照结构提成员先后顺序排列,当排到该成员变量时候,其前面已占用的空间大小必须为该类型的整数倍,否则补齐(在linux系统下),当该类性占据空间》=4字节的时候,依旧仅需要是4的倍数即可。
struct s1{
char a;
double b;
int c;
char d;
};
在windows下是24,在linux下是20
对于包含子结构体的空间计算:
1)整体空间是子结构体与父结构体占用空间最大成员(类型)的整数倍,但是在linux +c++环境下,如果最大成员类型占据的字节书超过4,那么整体空间是4的倍数即可。
2)数据对齐原则,内存按照结构提成员先后顺序排列,当排到该成员变量时候,其前面已占用的空间大小必须为该类型的整数倍,否则补齐(在linux系统下),当该类性占据空间》=4字节的时候,依旧仅需要是4的倍数即可;当排到子结构体成员变量时候,其前面已占用的空间大小必须为子结构体中最大类型大小的整数倍,否则补齐(在linux系统下),当该类性占据空间》=4字节的时候,依旧仅需要是4的倍数即可。。
对于包含数组的结构体空间计算:
结构提中,数组是按照单个变量一个一个进行拜访,而不是视为整体。
stuct{
int a;
char b[8];
}
占用大小为12
综上,对于结构体中包含结构体或数组的情况,在考虑对齐或者总空间为最大元素占用空间的倍数的时候,亦数组或者结果体中单独元素(最大)占用的空间为准,但是结构体和数组本身占用的空间不变。
还有包含位域的结构体大小计算,这个暂时不管。
共用体类型
一次仅采纳一个变量,所占空间为各个成员占用空间最大者
枚举类型:
占用空加一定为4