第16章 结构、联合和枚举

{% markmap %}

第16章 结构、联合和枚举

结构

  • 结构变量
    • 结构变量的特点
      • 1、结构的元素具有不同的类型
      • 2、访问结构成员需要指定结构成员的名字
    • 结构变量的声明
      • struct {
        int number;
        char name[NAME_LEN+1];
        int on_hand;
        } part1, part2;
      • 结构体内的成员变量不会和其他结构体冲突(独立的作用域)
    • 结构变量的初始化
      • struct {
        int number;
        char name[NAME_LEN+1];
        int on_hand;
        } part1 = {528, "Disk drive", 10},
        part2 = {914, "Printer cable", 5};
        • 新节点
    • 指定初始化
      • {.number = 528, .name = "Disk drive", .on_hand = 10}
    • 访问结构体成员
      • printf("Part number: %d\n", part1.number);
        printf("Part name: %s\n", part1.name);
        printf("Quantity on hand: %d\n", part1.on_hand);
      • 如果是指针,采用 ->
  • 结构类型
    • 结构标记的声明
      • struct part {
        int number;
        char name[NAME_LEN+1];
        int on_hand;
        };
      • 通过结构标记声明结构变量
        • struct part part1, part2;
    • 结构类型的定义
      • 通过typedef进行重命名
      • typedef struct {
        int number;
        char name[NAME_LEN+1];
        int on_hand;
        } Part;
      • 使用重命名的结构类型声明结构变量
        • Part part1, part2;
  • 嵌套结构
    • 将一个结构体嵌套到另一个结构体里面
  • 结构数组
  • ⭐ 字节对齐

联合

  • 联合的声明和定义
    • 和结构类似
  • 用途
    • 使用联合来节省空间
    • 使用联合来构造混合的数据结构
      • typedf union {
        int i;
        double d;
      • Number number_array[1000];
      • number_array[0].i = 5; number_array[1].d = 8.395;
    • 联合和结构组合(为联合添加标记)
      • #define INT_KIND 0
        #define DOUBLE_KIND 1
        typedef struct {
        int kind; /* tag field */
        union{
        int i;
        double d;
        } u;
        } Number;
      • n.kind = INT_KIND;
        n.u.i = 82;

枚举

  • 当变量的值是固定的几个时
  • 枚举变量的声明和定义
    • enum suit {CLUBS, DIAMONDS, HEARTS, SPADES};
    • enum suit s1, s2;
  • 枚举类型的重定义
    • typedef enum {CLUBS, DIAMONDS, HEARTS, SPADES} Suit;
      Suit s1, s2;
  • 枚举作为整数
    • enum suit {CLUBS = 1, DIAMONDS = 2, HEARTS = 3, SPADES = 4};
    • enum dept {RESEARCH = 20, PRODUCTION = 10, SALES = 25};
  • 联合结构枚举组合(为联合添加标记)
    • typedef struct {
      enum {INT_KIND, DOUBLE_KIND} kind;
      union {
      int i;
      double d;
      } u;
      } Number;
posted @ 2025-03-28 09:28  StarAire  阅读(10)  评论(0)    收藏  举报