struct即结构体,亦被直接称为“结构”。实际编程时,经常需要用相关的不同类型的数据来描述一个数据对象。例如,描述学生的综合信息时,需要使用学生的学号、姓名、性别、成绩以及家庭住址等不同类型的数据。但是,用相关的不同类型的数据来描述一个数据对象会使编程极为不便。因此,C语言提供了一种称为结构体(struct)的数据类型,以描述需要不同类型数据的数据对象
如何计算struct所占空间的大小:()
有人可能觉得不就是把结构体内所有变量所占空间加起来不就可以了吗?其实,这句话只对了一半,所有变量所占空间要加起来没错,但是机器为了更加容易的取出struct里面的数据,会将里面的变量所占空间进行对齐。这是以空间换时间的一种方式
注:变量的首地址(变量的首地址即结构体第一个成员的地址)
Typedef:最基本的功能是给数据类型起个别名
union 共同体
typedef union{
long i; int k[5];char c;
}DATE:
struct data{
int cat: DATE cow;double dog;
}
too;
DATE max;
struct结构体名称
{
//成员列表
};
printf("%lu %lu\n"sizeof(struct data),sizeof(max));
union共同体
1,共同体的大小由里面最大的数据类型大小来决定。
2 ,共用体顾名思义,里面的成员都是共享一块内存,对后面的一个成员赋值,会覆盖前面的成员的值(也不奇怪,因为他们共享一块内存。但前提是成员所占字节数相同,当成员所占字节数不同时只会覆盖相应字节上的值,比如对char成员赋值就不会把整个int成员覆盖掉,因为char只占一个字节,而int占四个字节)
从代码可得共同体占用空间最大的是数组占二十个字节,结构体占12个字节
所以一共占32个字节,因为结构体所占空间的大小必须是结构体中所占字节数最大的变量的大小的整数倍。