一,struct
1)结构及一般使用方法
struct name{//名称 //数据类型 int a; char b; float c; };//注意有分号,可在'}'后面,';'前面直接创建变量 struct name xiao={666,'s',3.14};//利用名称创建变量
2)无名结构体
无名结构体就是没有名称,意味着,除了在'}'后面,';'前面直接创建变量,无法在其他地方创建变量。
3)巧用typedef
利用typedef能够给struct起一个别名,起到简化程序,使代码可读性更强,
typedef struct name{ int a; char b; float c; }han; struct name xiao={666,'s',3.14}; han kun={666,'s',3.14};//han等于struct name;
4)struct小细节
struct 在创建变量前是不会分配内存空间的。struct在'}'后面,';'前面直接创建的变量是全局变量。
5)补充内存对齐(提高程序可移植性,提高运行效率)
先讲解内存对齐:
首先理解内存对齐规则:
1)第一个数据的偏移量为0(偏移量为距离首字节的距离)
2)每个数据的存储位置必须是这个数据的对齐数的整数倍字节位置(对齐数为系统默认的对齐数和自身字节大小中的较小值。
3)最后内存必须是结构体中数据中最大对齐数的整数倍。
4)如果嵌套了结构体,则这个结构体的对齐数是结构体中数据中最大的对齐数
5)如果是数组的话对齐数是数组类型,但是空间必须大于数组,而且是对齐数整数
接下来看题讲解
//求AA_t大小 typedef struct{ int a; char b; short c; short d; }AA_t;
二,enum
1)结构及一般使用方法
enum name{//名称 //数据 int a,//默认第一个为0,往下每次递增1 int b,//b=1 int c=6,//可以自行赋值,往下每次递增1 int d //d=7 }name1;//也可在创建变量 enum name name2=3;//创建变量
2)enum的作用和优点
类似于宏,相当于其起别名,但它有自己的优点:
- 增加代码的可读性和可维护性
- 和#define定义的标识符比较枚举有类型检查,更加严谨。
- 便于调试
- 使用方便,一次可以定义多个常量
三,union
1)结构
union name{//名称 //数据成员 int a; char c; }name1;//类推可以创建变量 union name name2;//创建变量
2)特点
所有成员共用一块空间,所有它们不能数据成员同时存在,改变一个数据成员所有的数据成员都会改变,数据成员的地址都一样。
篇外:由于篇幅有限,如果有不了解的概念等,可以评论区告诉我,我会为诸位一一解答