• 21年5月24说说结构体


    C/C++的结构体, 不是定义, 是设计一个类型.

    这个类型是不占空间的, 只有用它定义了变量之后, 才开辟空间(占空间).

    关于结构体对齐计算大小 >> 1 根据下一个成员及其类型确定当前的大小

                 2 根据最大的类型, 确定最终的大小

    结构体有联合体的时候

    struct student
    {
      char a;
      union ad
      {
        int aa;
        int bb;
      };
    };
    struct student
    {
      char a;
      typedef union add
      {
        int aa;
        int bb;
      }as;
    };

    主函数代码统一如下

    int main()
    {
      struct student s1;
      int size = sizeof(s1);
      printf("%d",size);
    
    return 0;
    }

    第一个的, 这个时候s1的大小是1,  因为union只是设计了一个类型, 并没有定义变量  ( 在main里面 student::ad y; 就可以定义一个联合体变量了 )

    第二个的( 注意typedef ), 这个时候s1的大小也是1, 不管 add 和 as 有没有, 都是1. 因为这里的 as 并没有定义变量, 只是 typedef 起的别名.



    struct student
    {
      char a;
      union 
      {
        int aa;
        int bb;
      };
    };
    struct student
    {
      char a;
      union add
      {
        int aa;
        int bb;
      }as;
    };

    第一个的,  s1的大小是8,  对齐之后的结果.   因为这个是无名的联合体,  被当作一个成员在看待.  struct里面的成员.

    第二个的,  s1的大小也是8,  注意这里的 add 是联合体的名字,   as 是这个联合体定义的一个变量.  (类型不开辟空间, 变量开辟空间 )

        第二个里面 没有 typedef,  这是区别于之前的关键所在

     

    总结:

      这里是在struct 里面以 union 为例子,  但是道理都是相通的.   struct 里面再嵌套一个struct  (而不是union),   同样满足这些规则.

      类型是不占空间,   变量才占.



    Linux学习笔记
  • 相关阅读:
    第二次冲刺 03
    第二次冲刺 02
    第二次冲刺 01
    程序员修炼三部曲阅读笔记03
    程序员修炼三部曲阅读笔记02
    团队项目计划会议
    课堂练习—购书
    构建之法阅读笔记03
    学习进度条十二
    课堂作业找水王2
  • 原文地址:https://www.cnblogs.com/zealwang/p/14803455.html
Copyright © 2020-2023  润新知