结构体的主要问题在于,结构体的大小,因为结构体需要内存对齐
共用体的主要问题在于,共用体 共用低地址,所以共用体的大小取决于最大的的元素字节数
一、结构体大小的计算
struct A
{
char a;
int b;
};
本来应该是1+4=5,对齐之后是char(1字节)+int(4字节)是需要补齐三字节,以保证struct的字节数可以整除最大元素的字节数,所以A的字节计算为(1+3)+4 = 8
struct B
{
char a;
short b;
int c;
};
B:(1+1)+2+4 = 8
struct C
{
int a;
char b;
};
C:4+(3+1) = 8
空结构体,在win平台下是不允许*.c文件定义空结构体的,在Linux下可以定义,字节大小为0
二、共用体
union X
{
char a;
short b;
};
共用体的字节大小计算,取最大元素,X中最大元素为short(2字节),所以X的大小为2字节
因为共用低地址,所以就可以利用这个特点写一个判断大小端的函数
//判断当前系数是否为小端
bool IsLittle()
{
union X sa;
sa.b = 0x1234;
return sa.a == 0x34;
}
在小端中short在内存中以0x 34 12形式保存,a只有1字节使用0x34,所以可以根据低地址是否为理想数据来判断大小端