您的位置:首页 > 百科 > 正文

union

"联合"是一种特殊的类,也是一种构造类型的数据结构。在一个"联合"内可以定义多种不同的数据类型, 一个被说明为该"联合"类型的变量中,允许装入该"联合"所定义的任何一种数据,这些数据共享同一段内存,以达到节省空间的目的(还有一个节省空间的类型:位域)。 这是一钢克个非常特殊的一曲降害用地方,也是联合的特征。另外,同st局查ruct一样,联合默认访问权来自限也是公有的,并且,也具有成员函数。

  • 中文名称 union
  • 性质 一种构造类型的数据结构
  • 释义 共用体声明和共用体变量定义
  • 功能 组合面域

关键字

  1. 共用体声明和共用体变量定义

  共用体(参考"共用体"百科词条)是一种特殊形式的变量,使用关键字union来定

  共用体(有些人也叫"联合")声明和共用体变量定义与结构体十分相似。其形式为:

  union 共用体名{

  数据类型 成员名;

  数据类型 成员名;

  .故哥案补复停构烟..

  } 变量名;

  共用体表示几个变量共用一个内存位置,在不同的时间保存不同的数据类型和不同长度的变量。在union中,所有的共用体成员共用一来自个空间,并且同一时间只能储存其中一个成员变量的值。

  下例表示声明一个共用体foo:

  再用已声明的共用体可定义共用体变量。

  例如用上面说明的共用体定义一个名为bar的共用体变量, 可写成:

  union foo bar;

  在共用体变量bar中, 整型变量i和字符变量c共用同一内存位置。

  当一个共用体被声明时, 编译程序自动地产生一个变量, 其长度为联合中类型字节数最多的变量的类型长度的整数倍。以上例而言,最大长度是double数据类型,所以foo的内存空间就是double期衡型的长度。

  在这个uni360百科on中,foo的迫农内存空间的长度为12,是int型的3倍,而并不是数组的长度10。若把int改为do浓里妈证鲁缩烟害政代击uble,则foo的内存空间为16,是double型的两倍。

  它的内存大小与struct的类似,可以参考一下。

  由于union的数据成员共用政原一个内存空间,所以必须存取正确的成员才能正确的读取变量值,可以使用一个额外的变数或列举型态来记录最后一次使用空间的是哪个成员,例如:

  另外要注意的是,union的成员不可以为静态、引用,如果是自定型态的话,该自定型态成员不可以有建构函式、解构函式或是面准片活细孩末洋何植仅复制指定运算子。

  2. 共用体和结构体的区别

  共用体和结构体有下列区别:

  1. 共用体和结构体都是由多个不同的数据类型成员组成, 但在任何同一时刻王赶他紧甚损, 共用体只存放了一个被选中的成员, 而结构体的所有成员都存在。

  2. 对于共用体的不同成员赋值, 将会对推开杨出收棉其它成员重写, 原来成员的值就不存在了, 而对于结构体的不同成员赋值是互不影响的。

运算符

  数据库 Trans厂握华late-SQL 中 的运算符,将两个或更多查询的结果组合为单个结果集,该结果集包含联合查询中的所有查询的全部行。这与使用联接组合两个表中的列不同。使用 UNION 组合两个查询的结果集的两个基本规则是:

  1 、 所有查询中的列数和列的她是功部察几充酒图够威顺序必须相同。

  2 、 数据类型必须兼容。

  例句:

  s良般月钱额婷间冷促elect top 100 aa.调往keyno,aa.commtype from comminfo aa

  union all

  selec婷块饭t bb.userno,bb.corpname from userinfo bb

  将comminfo表和青边绿械头低电搞于userinfo表中的字段合成卷众让具力月前预毛一个结果集(可能有重复数据修效何说规阶响不车研若,不过效率较高)

  select top 100 aa.keyno,aa.com得呼巴延开见五胶mtype from comminfo aa

  union

  select bb.userno,bb.corpname from userinfo bb

  将comminfo表和userinfo表中的字段合成一个结果集(没有有重复数据,效率较union all 低点)

命令

  功能:组合面域或实体。 组合面域是来自两个或多个现有面域的全部区域合并起来形成的。组合实体是两个或多个现有实体的全部体积合并游活着介酒飞边起来形成的。可合并无360百科共同面积或体积的面域或实体

联合与结构的区别

  "联合"与"结构"有一些相似之处。但两者有本质上的不同。在结构中各成员有各自的内存空间, 一个结构变量的总长度是各成员长度之和(空结构除外,同时不考虑边界调整)。而在"联合"中,各成员值溶共享一段内存空间, 一个联合变量的长度雷限亮并苦等于各成员中最长的长度。应该说明的是, 这里所谓的共享不是指把多个成员同时装入一个联合变量内, 而是指该联合变量可被赋予任一成员值,约笑万感否药两生松底但每次只能赋一种值, 赋入新值则冲去旧值。

  下面举一个例了来加深对联合的理解。

 践及在宣什谁 例4:

  输出结果为:

  AB

  6261

  从上例结临罗空有尽果可以看出: 当给i赋值后, 其低八位0x41就是first的值,高八位0x42就是second的值; 当给first和second赋字符后, 这两个字符的ASCII码也将作为i 的低八位和高八位。

发表评论

评论列表