结构体 枚举 typedef 应用

2019-04-13 15:39发布

day15

结构体存储方式
* 找模 摸是结固体中 字节数最大的
  • 模对齐 模的存储空间不够使重新开辟一块模
  • 内存对齐 每个成员变量存储的时候都要是后退成员的整数倍

结构体数组

  • 结构体数组的声明
    • struct 结构体名字 数组名[数组长度]
    • struct Student stu[5];
  • 结构体数组的初始化(赋值)
    • 静态初始化: 定义的同事赋值
struct Student stu[] = { {"小明",18}, {"小李",18}, {}, }; * 动态初始化: 限定一后初始化 ``` struct Student stu; stu[0] = {}; stu[1] = {}; ``` * 结构体数组的长度计算:(长度: 数组中元素的个数) sizeof(数组名)/ sizeof(元素的数据类型); sizeof(students)/sizeof(struct Student);

结构体指针

  • 申明格式
    • xxx aa;
    • xxx *p_aa = &aa;
    • struct 结构体名字 变量名;
    • struct 结构体名字 *p_aaa = &变量名;
  • 怎么给结构体指针赋值
    • struct 结构体名字 *p_aa;
    • p_aa = &结构体变量名;
  • 结构体指针怎么使用
struct Student { char *name; int age; } // 结构体类型 struct Student xiaoMing; struct Student *p_xiaoMing = &xiaoMing;
  • 如何通过结构体指针 给结构体变量赋值 1> (*p_xiaoming).name = "小明"; (*p_xiaoming).age = 18; 2>指针可以直接访问成员变量 p_xiaoming->name = "小红"; p_xiaoming->age = 18;

注意: 数组名是一个地址,首元素的地址

函数名是一个地址,函数早内存中的首地址

结构体变量名 ,不是一个地址 ,要获取结构体变量的地址要用 &

  • 结构体与函数
    • 结构体作为函数的参数
      • 结构体作为参数传值是值传递
      • 如果想函数内部改变结构体变量的值 就用指针
      • 结构体作为函数的返回值
      • 在返回的时候 直接将这个结构体变量的值返回即可
      • 如果想要返回地址 那么就要把这个结构体变量创建在堆区里
        *

枚举

  • 什么时候定义枚举
    • 有一个变量 要求这个变量只能在限定的几种情况之一
  • 如何创建一个枚举类型 enum 枚举名字 { 情况1, 情况2, 。。。 };
  • 声明枚举类型变量
//苹果官方 关于C中的枚举的命名规范,以k开头 后面的单词首个字母大写 //OC中的枚举,以相应的枚举名开头 enum Sex{ kMan, kFemale, kYao }; enum Sex s1;//s1就是一个枚举变量 ``` * 枚举变量的初始化 enum Sex s2 = kMan; ###枚举的值所对应得整型数 * 枚举的作用域 * 全局枚举 * 局部枚举 * 一般都会写全局枚举 * 每个枚举值 枚举项 都有一个对应的整型数据 * **typedef 类型定义** * .格式: * typedef 原有的数据类型 别名; * 什么时候用? * 一般不用,下节课的情形下使用,或者心真的累的时候用
  1. 使用typedef为结构体类型取别名.(常用)
    1>先声明,后起别名
    struct Student
    {
    char *name;
    int age;
    int score;
    };
    typedef struct Student Student;
    2>声明的同时起别名
    typedef struct _Student
    {
    char *name;
    int age;
    int score;
    }Student; 3>匿名结构体起别名
    typedef struct
    {
    char *name;
    int age;
    int score;
    }Student;
2,使用typedef为枚举类型取1个短别名 1>先声明,后起别名 enum Direction { DirectionEast, DirectionSouth, DirectionWest, DirectionNorth }; typedef enum Direction Direction; 2>声明的同时起别名 typedef enum _Direction { DirectionEast, DirectionSouth, DirectionWest, DirectionNorth }Direction; 3>匿名枚举起别名 typedef enum { DirectionEast, DirectionSouth, DirectionWest, DirectionNorth }Direction; ``` // 但是最常用的是这两种 // 结构体别名 typedef struct { char *name; int age; int score; }Student; //枚举别名 typedef enum { DirectionEast, DirectionSouth, DirectionWest, DirectionNorth }Direction;