一:联合体
1》:联合体类型的声明与计算
像结构体一样,联合体也是由一个或多个成员构成,这些成员可以是不同类型的。但是编译器只为最大的成员分配足够的空间。联合体的特点是所有的成员共用同一块空间。所以联合体又叫做共用体。当然给联合体其中的一个成员赋值,其他成员的值随之改变。可以参考下面的图片,来找到结构体与联合体的区别。
就像结构体的声明要有struct,我们也需要创建联合体的名字。
同样与结构体一样,可以用两种方法命名联合体:1.声明标记的方法(union) 2.使用typedef来创造独一无二的类型名。这里与结构体相似可以试着写下来,这里就不过多讲述了。
2》:联合体的特点
相比于结构体而言,联合体可以节省大量空间。
下面我们可以举个经典例子:
我们参与抽奖,抽奖的商品又三种:分别为图书、杯子和衬衫。每个商品都有库存量、价格、商品类型其他相关的其他信息。
图书:书名、作者、页数。
杯子:设计
衬衫:设计、可选颜色、可选尺寸。
如果我们没有耐心思考,就有可能直接使用结构体,例下
struct gift_list
{
int stock_number ; 库存量
double price; 价格 这三个都是公共属性。
int item_type; 商品的类型
char title[10]; 书名
char auther[30];作者; 这是图书的特殊属性
int pages;页数
char design[10];设计
int color;颜色
int sizes;尺寸
}
成员里面的值将是图书,杯子,衬衫之一。虽然上述结构十分好用,但是它十分浪费空间,因为对于杯子而言它就不需要书名、作者、页数、颜色、尺寸。我们可以在结构体里面放置一个联合,可以减少结构所需要的空间。例下
struct gift_list
{
int stock_number ; 库存量
double price; 价格 这三个都是公共属性。
int item_type; 商品的类型
uoion{
struct{
char title[10]; 书名
char auther[30];作者; 这是图书的特殊属性
int pages;页数
}book;
struct{
char design[10];设计
} mug;
struct{
char design[10];设计
int color;颜色
int sizes;尺寸
}shift;
}items;
}
二:枚举
1》:枚举类型的声明
虽然枚举与结构体、联合体没什么共同之处,但它们的声明方法是很类似的。然而与前面两个不同的是它的枚举常量的名字不一样 它是enum
枚举类型的标记类似于结构与联合的标记,这里就不再详细介绍了。
2》:枚举类型的使用
枚举变量和常量作为整数来处理。默认情况下,编译器会把整数0,1,2......依次赋值给枚举中的常量。我们可以看下面的代码来理解
enum Sex
{
MALE,
FEMALE,
SECRET 如果这里不赋值的话,就是将0,1,2分别赋值给MALE FEMALE SECRET
};
但是我们也可以赋值给它们,也没有任何要求
enum Sex
{
//这里列举枚举enum Sex的可能取值
//这些可能取值是常量,也叫枚举常量
MALE=5,
FEMALE=8,
SECRET=10
};
注意:虽然把枚举的值作为整数使用很方便,但是把整数用作枚举的值是非常危险的。
例如:当不小心把5存放到MALE中,这样4就不能代表任何其他的了。也就是MALE也仅仅是4的名字而已。