C语言自定义数据结构(2021.6.3)

  • 结构体类型和结构体变量
    • 结构体:作用:用于在内存空间中存储不同类型的多个数据。
      • 定义格式:
        • struct 结构体名
        • {
          • 类型 成员名1;
          • 类型 成员名1;
          • 类型 成员名2;
        • };
        • 定义一个结构体仅仅只是定义了一个较为复杂的数据类型,并不会为结构体中的成员分配内存空间。
        • struct 结构体名 一起组成结构体类型名,一但用户定义出一个结构体类型,那么该类型就和基础类型一样使用;
        • 结构体可以嵌套定义:在一个结构体的内部,又可以存在一个结构体的完整定义,但要注意,内部的结构体需要定义的同时定义一个变量作为外部结构体的成员名;
      • 用结构体如何定义变量:
        • 1)利用类型定义变量
          • struct 结构体名 变量名1,变量名2…;
        • 2)定义结构体同时定义变量
        • struct 结构体名
        • {
          • 类型 成员名1;
          • 类型 成员名2;
        • }变量名1,变量名2…;
      • 结构体成员的访问:
        • 变量名.成员名;
      • 结构体变量初始化、
        • struct 结构体名 变量名1={成员1值,成员2值…};
        • struct 结构体名
        • {
          • 类型 成员名1;
          • 类型 成员名2;
        • }变量名1=={成员1值,成员2值…};
  • 结构体数组
    • 定义结构体数组
      • struct 结构体名 数组名[元素数量];
  • 结构体指针
    • struct 结构体名 * 指针变量名,….;
      • 结构体指针 -> 成员名
      • (*结构体指针).成员名;
  • 结构体指针变量做函数参数
    • 1.void fun (int num,char name[],char sex,…);
      • struct student st;
      • fun(st.num,st.name….);
    • 2.void fun (struct student st );
      • struct student st;
      • fun(st);
    • 3.void fun (struct student *pst );
      • struct student st;
      • struct student *p =&st;
      • fun(&st);/fun(p);
  • 求结构体大小!
    • 结构体内存在 字节对齐!
    • 字节对齐
        1. 结构体类型中每个成员首先放置在自己的对齐边界上, 不在边界上,字节填充;
        1. 结构体的大小必须是自身最大成员大小的整数倍,如果 不是,字节填充;
          • C语言自定义数据结构(2021.6.3) - 图1
      • pragma pack (1) 预处理指令 设置(1)字节对齐

  • 共同体类型(联合体)

    • 作用:提供了一种不同类型的数据共同占用同一块内存空间的方法;

      • 如何定义共用体:
        • union 共用体名
          • {成员表}变量表列;
      • 联合体嵌套结构体:

        • 举例:

          1. union un
          2. {
          3. int a;
          4. struct st
          5. {
          6. char c1;
          7. char c2;
          8. ...
          9. }s;
          10. };
          • 结构体嵌套联合体:
            • C语言自定义数据结构(2021.6.3) - 图2

  • 枚举类型
    • 枚举
      • C语言自定义数据结构(2021.6.3) - 图3
  • 用typedef命名类型