结构、联合、枚举

结构、联合、枚举

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;
posted @ 2025-01-05 21:57  爱新觉罗LQ  阅读(3)  评论(0编辑  收藏  举报