struct student
{
char mark; //1 bytes
long num; //8 bytes
float score; //4 bytes
};
在Mac上运行sizeof(student)为24,因为有字节对齐
union test
{
char mark;
float num;
long score;
};
在Mac上运行sizeof(test)为8,因为共用体将一个char类型的mark、一个long类型的num变量和一个float类型的score变量存放在同一个地址开始的内存单元中,而char类型和long类型所占的内存字节数是不一样的,但是在union中都是从同一个地址存放的,也就是使用的覆盖技术,这三个变量互相覆盖,而这种使几个不同的变量共占同一段内存的结构,称为“共用体”类型的结构。
因union中的所有成员起始地址都是一样的,所以&a.mark、&a.num和&a.score的值都是一样的












网友评论