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.

     
  • 相关阅读:
    JS收集<3>:限制URL
    TSQL小收集<1>:为已经存在的表添加唯一约束
    第一个NHibernate实例 yangan
    用Javascript获取select的值 yangan
    获取页面名称语句 yangan
    asp.net中当服务器出错时显示指定的错误页面,同时把错误信息写入系统日志文件 yangan
    Log4Net使用指南 yangan
    明确自己的首要责任
    《大数据时代》摘录
    2013年3月阅读链接
  • 原文地址:https://www.cnblogs.com/zlcxbb/p/5753715.html
Copyright © 2011-2022 走看看