结构体 、 共用体 枚举 位运算
结构体
结果体类型——用来描述复杂数据的一种数据类型
构造类型 用户自定义类型
结构体
描述一个结构体
语法:
struct:结构体类型名
{
成员列表
}
struct 关键字
表示是在构造一个结构体的类型
结构体名
用来描述结构体这个类型的一个名称
成员列表
表示要描述的复杂数据 中用到的 具体成员变量
定义方式与之前的变量的方式相同
多个成员之间用分号隔开
最后有一个分号表示结束
eg:
struct student
{
char name[30];
int sno;
float score
char sex;
};//表示定义出一个数据类型
可以定义一个变量
定义指针变量
定义数组
注意“
1.结构体类型的使用过程
a先定义出类型
b定义变量
2定义变量
struct 结构体名 变量名;
结构体类型 :int
结构体初始化
struct student s = {};
初始化
看每个成员变量 具体是什么数据类型
根据各个成员变量 自身的数据类型 进行初始化
初始化的顺序 按照定义的顺序 依次初始化
结构体变量的引用:
结构体数据引用时 一般是引用的具体的成员数据
引用的成员
.成员运算符 “的”
使用:
结构体变量名.成员名 printf("%d",s.sno);
-> 指向结构体成员运算符
结构体指针-> 成员名
结构体变量名.成员名
结构体类型的定义形式
形式1 先定义类型,然后定义变量
struct demo
{
};
struct demo d;
形式2 定义类型的同时 定义变量
struct demo
{
}d;
形式3 定义类型的同时 定义变量 可以省略结构体名
struct
{
}d;只能用一次
结构体类型的大小:
内存对齐
结构体对齐规则
结构体的对齐:
结构体的对齐规则: //内存地址的对齐
1.在32位的平台上,默认都是按4字节对齐的。
2.对于成员变量,
各自在自己的自然边界上对齐。
char -- 1字节
short -- 2字节
int -- 4字节
3.如果 成员变量中有比4字节大。
此时 整个结构体 按照4字节对齐。 //32位的平台
4.如果 成员变量中没有有比4字节大。
此时 整个结构体 按照最大的那个成员对齐。
//32位的平台
//如果有超过4字节 ,按照4字节对齐
//如果没有超过4字节的,则按成员变量中最大对齐
----------------------------------------------
//64位的平台
//如果超过4字节的,按超过的最大的成员变量对齐
//如果没有超过4字节的,则按成员变量中最大对齐
-----------------------------------------------
同类型的结构体变量之间 ,可以相互赋值
struct student s1;
struct student s2;
s2 = s1;