一.结构体
语法:
1.struct结构体名
{
成员列表:
};
(1) struct 关键字
表示 是在构造一个结构体的类型
(2) 结构体名
用来 描述 结构体这个类型 一个名称
(3) 成员列表
表示 要描述的复杂数据 中用到的 具体的成员变量
定义的方式,与之前变量的方式相同
多个成员变量之间,用分号隔开。
(4) 最后 有一个 分号 表示 结束
例如: 定义一个学生的结构体;
注意:结构体类型的使用的过程
(1)先定义出类型
(2)定义变量
2.结构体初始化
初始化:
(1)看每个成员变量,具体是什么数据类型。
(2)根据 各个成员变量 自身的数据类型,进行初始化。
(3)初始化的顺序,按照定义的顺序,依次初始化
例如:
输出3个学生信息:
3.结构体类型的定义形式:
(1) 先定义类型,然后定义变量
struct demo
{
};
struct demo d;
(2) 定义类型的同时,定义变量
struct demo
{
}d;
(3) 定义类型的同时,定义变量,可以省略 结构体名
struct
{
}d;
4.结构体类型的大小:
在 C 语言中,结构体的大小由结构体中各成员的大小以及对齐要求决定。结构体的大小可以通过 sizeof 运算符来获取。以下是一些重要的考虑因素:
(1)成员大小:结构体的每个成员占用一定的字节数。例如,int 通常占用 4 字节,char 占用 1 字节,float 通常占用 4 字节。
(2)对齐要求:为了提高性能,编译器通常会将结构体的成员按照特定的对齐要求排列。这可能会导致结构体中存在填充字节,使得实际占用的内存比单纯的成员大小总和要大。
示例:
struct Person 的大小取决于 char[50]、int 和 float 的大小,以及它们的对齐要求。可能会有填充字节来满足对齐要求。
(3)对齐和填充:如果结构体中有不同类型的成员,编译器会在每个成员之间插入填充字节,使得每个成员都按其对齐要求对齐。比如在某些系统上,int 可能需要在 4 字节边界对齐,float 也是如此,因此在 char 和 int 之间可能会插入 3 字节的填充。
(4)同类型的结构体变量之间 ,可以相互赋值
struct student s1;
struct student s2;
s2 = s1;
二.共同体
union
语法:
union 共用体名
{
成员变量;
};
共用体:
(1)共用了一块内存空间
(2)公用了最大成员的空间
注意:
1.共用体初始化时,只能给一个值,默认时给到第一个成员的。
2.共用体变量中的值,取决与最后一次给到的值,还要看能影响几个字节。
对比 结构体
1.结构体中各个成员 拥有自己独立空间
2.共用体中,成员共用一块空间
//共同体:
//结构体: