75_iOS干货41_结构体总结

一,结构体的定义

  1. 定义的同时,初始化
    1. struct Dog
          {
              char *name;
              int age;
              double height;
          };
      struct Dog sd = {"wc", 13, 5.0};
  2. 先定义,再逐个初始化
    1. struct Dog
          {
              char *name;
              int age;
              double height;
          };
      struct Dog sd1;
      sd1.name = "ww";
      sd1.age = 5;
      sd1.height = 10.9;
  3. 先定义,再一次性初始化
    1. struct Dog
          {
              char *name;
              int age;
              double height;
          };
      struct Dog sd2;
          // 特别注意: 结构体和数组有一点区别, 数组不能先定义再进行一次性的初始化, 而结构体可以
          // 只不过需要明确的告诉系统{}中是一个结构体
      sd2 = (struct Dog){"xq", 8, 8.8}; 
  4. 指定将数据赋值给指定的属性
    1.  struct Dog
          {
              char *name;
              int age;
              double height;
          };
      // 指定将数据赋值给指定的属性
      struct Dog sd3 = {.height = 1.77, .name = "ww", .age = 33};
  5. 定义结构体时,定义结构体变量
    1.   struct Dog
          {
              char *name;
              int age;
              double height;
          } sd4;
      
          sd4.age = 30;
  6. 定义结构体类型的同时定义结构体变量, 并且省略结构体名称
    1.   struct 
          {
              char *name;
              int age;
              double height;
          }sd5;
      sd5.age = 10;
      // 弊端: 由于结构体类型没有名称, 所以以后就不能使用该结构体类型
      // 优点: 如果结构体类型只需要使用一次, 那么可以使用该方式
  7. typeDefine定义结构体
    1.   typedef struct {
                  int year;
                  int month;
                  int day;
              } MyDate2;
              
      // 结构体类型变量为 d2,并赋值
              MyDate2 d2 = {2016, 5, 24};
  8. 苹果官方结构体
    1. //CGSize结构体定义
      struct CGSize {
          CGFloat width;
          CGFloat height;
      };
      typedef struct CG_BOXABLE CGSize CGSize;
      
      //CGSize设置方法结构体定义
      CG_INLINE CGSize
      CGSizeMake(CGFloat width, CGFloat height)
      {
        CGSize size; 
        size.width = width;
        size.height = height;
        return size;
      }
      
      //内联函数和宏
      CG_INLINE:CG_INLINE is a #define for static inline. This causes the compiler to create the code for the function inline, rather that creating a function call on the stack. See here and here for more information
      
      
  9. 仿照苹果官方的自定义结构体
    1. //自定义结构体
      struct ClickSize {
          CGFloat top;
          CGFloat left;
          CGFloat bottom;
          CGFloat right;
      };
      typedef struct ClickSize ClickSize;
      
      /*
      也可以用以下方法代替上述
      typedef struct ClickSize {
          CGFloat top;
          CGFloat left;
          CGFloat bottom;
          CGFloat right;  
      
          } ClickSize;
      */
      
      //自定义结构体设置方法
      CG_INLINE ClickSize
      ClickSizeMake(CGFloat top, CGFloat left, CGFloat bottom, CGFloat right)
      {
          ClickSize clickSize;
          clickSize.top = top;
          clickSize.left = left;
          clickSize.bottom = bottom;
          clickSize.right = right;
          return clickSize;
      };
      

二,存储空间

会获取结构体类型中占用内存最大的属性的大小, 然后取该大小的倍数

三,访问结构体变量的方法

  1.       结构体变量名称.属性;
    1.  struct Person
          {
              int age;
              char *name;
              double height;
          };
          
          struct Person sp = {30, "ln", 1.75};
          
          sp.name = "lnj";
  2.      (&结构体变量名称)->属性;
    1. struct Person
          {
              int age;
              char *name;
              double height;
          };
          
          struct Person sp = {30, "ln", 1.75};
          (&sp)->age = 20;
  3.      (*结构体指针变量名称).属性;
    1.   struct Person
          {
              int age;
              char *name;
              double height;
          };
          
          struct Person sp = {30, "ln", 1.75};
          struct Person *sip;
          sip = &sp;
          (*sip).age = 88;
  4.      结构体指针变量名称->属性;
    1.   struct Person
          {
              int age;
              char *name;
              double height;
          };
          
          struct Person sp = {30, "ln", 1.75};
          struct Person *sip;
          sip = &sp;
          (*sip)->age = 88;

猜你喜欢

转载自blog.csdn.net/a_horse/article/details/83614699