结构、联合、枚举
结构、联合、枚举
1. 结构 (Strut)
struct Date{
unsigned short year,month,day;
}; // 注意 struct 后面要有 ;
struct student{
char name [100];
char id[10];
short gender;
Date birthday;
};
2. 联合 (Union)
可以使同一个存储空间有多种不同的类型
// 联合在内存中所占的大小,是由这些成员类型中最大的一种大小所决定的
// 在 这个 Demo 中,数组 c 的大小是 8个字节;l 和 结构体 s 都占了 4个字节
// 所以 sizeof(MyUnionType) = 8
union MyUnionType{
unsigned long 1;
unsigned char c[8];
struct{
unsigned char i;
unsigned char o;
unsigned short v;
}s;
};
联合常用于一个数据会有多种格式的情况,联合的使用方法和结构相似
// 一个联合体在某一时刻只能使用其中的一种类型
MyUnionType datal,data2,data3;
data1.c[0] = 'a';
data2.1 = 0x3EUL;
data3.s.i = 'f';
// 错误用法
MyUnionType data{};
data.1 = 0x3EUL;
data.s = {'f','s',12};
// 由于它们都是指向同一块内存区域,所以第二条语句执行后会覆盖第一条语句的结果
// 这时再使用 data.l 的值不再是有效值
3. 枚举(enum)
enum ColorType{
Red,
Blue,
Yellow,
Green
}; // 注意末尾要有分号 ;
// 使用
ColorType color;
color = Red;
// 枚举类型可以与数值相互转换
C++ 中引入了类的作用域的枚举 ===> 在 enum 关键字后面再加个关键字 class
这样在使用时,加类名:: 就可以区分了
enum class ColorType{
Red,
Blue,
Yellow,
Green
};
enum class ColorType2{
Red=1,
Black,
White,
Green
}
// 使用
ColorType color;
color = ColorType::Red;