共用体
1、概述与定义
什么是共用体:
共用体又称联合体,是不同数据类型的数据可以使用共同的存储区域。因此同一时间下,只能访问一个共用体的成员,因为它们的空间同一个地方的。
共用体的定义:
共用体的定义与使用与结构体的定义完全一致,唯一的区别是内存大小分配不同。
union 共用体名{
共用体成员
};
共用体变量的定义:
共用体变量的定义与结构体变量的第一完全一致。
//方法1:正常定义结构体变量
union 共用体名 共用体变量名;
//方法2:定义共用体时,定义共用体变量
union 共用体名{
共用体成员列表
}变量名1,变量名2; //直接在这里写变量名,变量名之间用,隔开
2、初始化共用体
一般情况初始化:
共用体中虽然成员有多个,但因为它们的空间一样,所以实际赋值是只需要赋值一个。
//1.定义共用体变量时初始化
union 共用体名 共用体变量名 = {一个值};
//2.定义共用体时,定义共用体变量的初始化
struct 共用体名{
共用体成员列表
}变量名 = {一个值};
初始化共用体中的结构体:
这时的初始化类似结构体变量的部分初始化,指定某一个变量,然后初始化。但同样的,只能初始化一个值。
union 共用体名 共用体变量名 = {
.成员 = 值
};
3、访问共用体变量
共用体变量的访问方法与结构体变量的访问方法完全一致。
访问共用体变量时,应该遵循赋值谁,就访问谁。尽管共用体成员的空间是一样的,强行访问也不会报错,但是逻辑上会有一些问题。
4、共用体大小
计算原则:
- 要能够容纳的下最大的数据
- 要是数据类型大小的整数倍,不是则需要补齐
举例:现在有一个共用体定义如下,计算它的大小。
union uTest{
double a;
int b;
char c;
char d[9];
}
在这个共用体中,所需空间最大的是d,空间为9字节。占用空间最大的类型是double,空间为8字节。因为9不能被8整除,所以补齐到16。因此该共用体的大小为16。
枚举
1、定义
枚举类型的定义与结构体一样。成员需要用" , "隔开
enum 枚举名{
枚举成员列表
};
在定义时,新的枚举的成员名不能与其他枚举的成员名有重复。
2、枚举的赋值与打印值
赋值枚举变量只能赋值枚举中列出的值。
枚举变量的打印值并不是枚举出来的值,而是从0开始的整型(在未进行初始化情况下)
如果枚举定义时,进行了指定值,那么实际值将会从指定值开始。
在赋值时,枚举的成员的赋值可以一样。
3、枚举大小
枚举的值实际上是一个整型,所以不论枚举成员有多少个,枚举大小都是4字节。