六、指向结构体的指针
  结构体指针变量的定义形式:struct 结构体名称 指针变量名*
  有了指向结构体的指针,那么有3种访问结构体成员的方式
  结构体变量名.成员名
  (*指针变量名).成员名
  指针变量名->成员名
  int main(int argc, const char * argv[]) {
  // 定义一个结构体类型
  struct Student {
  char *name;
  int age;
  };
  // 定义一个结构体变量
  struct Student stu = {“MJ”, 27};
  // 定义一个指向结构体的指针变量
  struct Student *p;
  // 指向结构体变量stu
  p = &stu;
  //这时候可以用3种方式访问结构体的成员
  // 方式1:结构体变量名.成员名
  printf(“name=%s, age = %d ”, stu.name, stu.age);
  // 方式2:(*指针变量名).成员名
  printf(“name=%s, age = %d ”, (*p).name, (*p).age);
  // 方式3:指针变量名->成员名
  printf(“name=%s, age = %d ”, p->name, p->age);
  return 0;
  }
  七、结构体如何开辟存储空间
  看上去, 结构体分配存储空间是将所有属性占用的存储空间的总和加在一起后再分配
  注意:
  其实结构体分配存储空间本质上并不是将所有属性占用的存储空间的总和加在一起后再分配
  而是会获取结构体类型中占用内存大的属性的大小, 然后取该大小的倍数
  特例:
  如果剩余的存储空间”不够”存储将要存储的数据, 那么会重新开辟8个字节的存储空间, 并且将需要存储的数据放到新开辟的存储空间中。
  如果剩余的存储空间”够”存储将要存储的数据, 那么不会开辟了。
  八、枚举
  枚举是专门用于表示几种固定类型的取值,枚举的本质是基本数据类型, 是整型。在iOS开发中是非常常用的。
  枚举类型定义的格式
  enum 枚举类型名称{
  类型1,
  类型2,
  };
  注意:由于枚举类型的本质是整型, 所以枚举类型除了可以接收枚举的固定的取值以外, 还可以接收其它整型的值,枚举的值默认从0开始依次递增。
  定义枚举的一般规范:
  *(1)枚举类型的取值一般以k开头 后面跟上枚举类型的名称 跟上当前取值的含义
  (2)和结构体一样, 枚举类型的名称首字母大写*
  enum Season
  {
  kSeasonSpring,
  kSeasonSummer,
  kSeasonAutumn,
  kSeasonWinter
  };