一、结构体
结构体:相同或不同的数据类型的集合
1.结构体定义
结构体关键字--struct
标准格式(有名结构体)
struct 结构体名
{
数据类型1 变量名1;
数据类型2 变量名2;
数据类型3 变量名3;
。。。
数据类型n 变量名n;
};
无名结构体:
struct
{
数据类型1 变量名1;
数据类型2 变量名2;
数据类型3 变量名3;
。。。
数据类型n 变量名n;
};
定义结构体变量
a.struct结构体名 变量名;
b.在定义结构体的}与;之间直接写变量名}std;
无名结构体定义变量只能用第二种方式,多个变量逗号隔开,如果无名结构体后面跟 struct std;表示重新定义了一个新的结构体。
typedef 类型重定义,给结构体起别名,typedef struct {}别名;
2.结构体初始化
不初始化 STU stu;
默认初始化 STU stu={0};
部分初始化 STU stu={"zhangsan"} 和数组一样不允许跳元素
全部初始化
3.结构体引用
直接引用:. 左边是结构体变量
间接引用:-> 左边必须是结构体指针变量
结构体数组
结构体指针
结构体与函数
4.结构体大小
1.默认内容4字节对齐,不足4字节按照4字节补齐,
2.结果是最大字节数据类型的整倍数,
3.结构体成员的首地址能被这个成员的字节数整除,默认从0开始
二、联合体
联合体(共同体)
关键字:union
相同:联合体的定义,访问和结构体一样,
区别:
联合体不允许初始化(不允许部分,全部初始化)
结构体成员内存互不干扰,联合体成员共享内存空间和首地址,但是访问需要独立,
联合体作用
大端存储:将数据的高字节存放在地址的低地址处,数据的低字节存放在地址的高地址处
小端存储:将数据的低字节存放在地址的低地址处,数据的低字节存放在地址的高地址处
用联合体来验证大小端存储的例子
三、枚举
关键字 enum
enum data
{
a,b,c
};
0,1,2
enum data
{
a,b,c,d=100.d
};
0,1,2,100,101