目录
一,struct
1)结构及一般使用方法
2)无名结构体
3)巧用typedef
4)struct小细节
5)补充内存对齐(提高程序可移植性,提高运行效率)
二,enum
1)结构及一般使用方法
2)enum的作用和优点
三,union
1)结构
2)特点
一,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)特点
所有成员共用一块空间,所有它们不能数据成员同时存在,改变一个数据成员所有的数据成员都会改变,数据成员的地址都一样。
篇外:由于篇幅有限,如果有不了解的概念等,可以评论区告诉我,我会为诸位一一解答