zoukankan      html  css  js  c++  java
  • struct和union的区别

    1)union是几个不同类型的变量共占一段内存(相互覆盖);struct是把不同类型的数据组合成一个整体
    2)对齐方式略有区别;union不需要+,只需要拿出对齐后的最长


    structureunion

    Keyword struct defines a structure.

    Keyword union defines a union.

    Example structure declaration:

    struct s_tag 
    {
      int ival;
      float fval;
      char *cptr;
    }s;

    Example union declaration:

    union u_tag 
    {
      int ival;
      float fval;
      char *cptr;
    }u;

    Within a structure all members gets memory allocated and members have addresses that increase as the declarators are read left-to-right. That is, the members of a structure all begin at different offsets from the base of the structure. The offset of a particular member corresponds to the order of its declaration; the first member is at offset 0. The total size of a structure is the sum of the size of all the members or more because of appropriate alignment.

    For a union compiler allocates the memory for the largest of all members and in a union all members have offset zero from the base, the container is big enough to hold the WIDEST member, and the alignment is appropriate for all of the types in the union.

    When the storage space allocated to the union contains a smaller member, the extra space between the end of the smaller member and the end of the allocated memory remains unaltered.

    Within a structure all members gets memory allocated; therefore any member can be retrieved at any time.

    While retrieving data from a union the type that is being retrieved must be the type most recently stored. It is the programmer's responsibility to keep track of which type is currently stored in a union; the results are implementation-dependent if something is stored as one type and extracted as another.

    One or more members of a structure can be initialized at once.

    A union may only be initialized with a value of the type of its first member; thus union u described above (during example declaration) can only be initialized with an integer value.

     
  • 相关阅读:
    day15作业
    [原]iTop自定义修改相关时间字段的实现要点记录
    获取socket统计信息
    PG-跨库操作-postgres_fdw
    break跳出rewrite阶段,不会在匹配,进入输出阶段。 last 类似重新发起请求,所以会重新进行匹配。
    项目经验--把责任人定下来,流程理顺,工作开展会顺利很多
    异常排障
    docker stack的简单命令
    企业微信群机器人
    redis迁移方案 redis查看主从信息
  • 原文地址:https://www.cnblogs.com/zlcxbb/p/5753715.html
Copyright © 2011-2022 走看看