1.联合创建
联合是一种数据类型,它能在同一个内存空间中存储不同的数据类型(非同时存储)
创建联合和创建结构的方式相同,需要一个联合模板和联合变量。使用关键字union
union hold{
int digit;
double bigfl;
char letter;
}
以上形式声明的结构可以存储一个int类型,一个double类型和char类型的值。然而,声明的联合只能存储一个int类型的值或一个double类型的值或char类型的值
union hold fit; //hole类型的联合变量
union hold save[10]; //内含10个联合变量的数组
union hole * pu //指向hold类型联合变量的指针
第一个声明创建了一个单独的联合变量fit,编译器分配足够的空间以便它能存储联合声明中占用最大字节的类型。在本例中,占用空间最大的是double类型的数据,每个占8字节。
第二个声明创建一个数组save,内含10个元素,每个元素都是8字节
第三个声明创建了一个指针,该指针变量存储hold类型联合变量的地址
2.联合使用
union hold{
int digit;
double bigfl;
char letter;
}
union hold fit;
fit.digit = 23; //把23存储在fit,占2字节
fit.bigfl = 2.0; //清除23,存储2.0,占8字节
fit.letter = 'h' //清除2.0,存储h,占1字节
下面我们来看一个例子
这里我们创建了一个联合结构p和一个联合结构指针pf。虽然我们只给letter成员初始化了值,但我们可以看到系统给到结构p的大小是8个字节。
而pf指针可以使用的值也是letter成员的值(就算你声明要使用digit,这主要巴字节空间二进制是一样,不管用那个成员,用的都是这些二进制的值)
3.匿名联合(C11)
匿名联合和匿名结构的工作原理相同,即匿名联合是一个结构或联合的无名联合成员
Struct car_data{
char make[15];
int status;
union{
struct owner owncar;
struct leasecompany leasecar;
};
}
在这个例子中,更具结构当中sta的状态,我们选择打印年纪或者身高(本案例中联合变量类型放在一起其实不太合理,在打印float的时候会产生错误。这里主要为了讲解使用方法)
4.枚举类型
枚举类型声明符号名称来表示整型常量,使用enum关键字,可以创建一个新“类型”并指定它可具有的值,而实际上,enum常量是int类型,因此,只要能使用int类型的地方就可以使用枚举类型
enum spectrum{red,orange,yellow,green,blue,violet};
Enum spectrum color; //color可能的值是red,orange,yellow等。这些符号常量被称为枚举符
枚举类型的目的是为了提高程序可读性和可维护性。如果要处理颜色,使用red和blue比使用0和1更直观。
需要注意,枚举类型只能在内部使用,如果要输入color中orange的值,只能输入1,而不是单词orange。或者,让程序先读入字符串"orange",在将其转换为orange代表的值
5.枚举赋值
enum spectrum{red,orange,yellow,green,blue,violet};
enum spectrum color;
正常情况下,color枚举的值对应是0~5
而如果只给一个枚举常量赋值,没有对后面的枚举常量赋值,那么后面的常量会被赋予后续的值
enum spectrum color{red,orange=10,yellow,green,blue,violet};
red默认值是0,而orangeyellow,green,blue,violet的值分别是10,11,12,13,14
这里我们来看一个例子
这里我们先判断枚举结构变量color的值是否是red。变量名默认是是第一个元素的值(和数组差不多,数组名是第一个元素的地址),所以条件判断成功,所以开始for循环,通过color的值(red 就是 1)来充当colors数组的字符串值。
好了朋友们我们今天的内容到这就结束了,今天的内容到这里就结束了,如果有啥不会的朋友记得论坛里面提问哈~
如果朋友你感觉文章的内容对你有帮助,可以点赞,关注文章和专栏以及关注我哈,嘿嘿嘿我会定期更新文章的,谢谢朋友你的支持哈