原文:http://msdn.microsoft.com/en-us/library/5dxy4b7b(v=vs.80).aspx

联合是用户定义的数据或类类型,在任何时间里,它只包含成员列表中的一个对象(当然,对象可以是数组或者类类型)。

union [tag] { member-list } [declarators];
[union] tag declarators;


参数

tag

联合的类型名字。

member-list

联合所包含的数据类型列表,参考备注部分。

declarators

声明列表指明联合的名字。更多信息,浏览声明符概览


备注

联合的成员列表反应联合所能包含的数据的种类。一个联合要求足够的存储空间,以保存成员列表中的最大成员。更多信息,参考声明联合(C语言参考)

声明联合

在开头使用关键字 union,使用花括号包围成员列表:

// declaring_a_union.cpp
union DATATYPE // 声明联合类型
{
char ch;
int i;
long l;
float f;
double d;
} var1; // 声明可选的联合变量(可以是多个) int main()
{
}

使用联合

C++联合是类类型的有限形式。它可以包含访问修饰符(public, protected, private),成员数据,和成员函数,包括构造和析构函数。它不能包含虚拟函数或静态数据成员。不能被使用为基础类,也不能有基类。在联合中的访问默认是public的。

在C中,必须使用union关键字来声明一个联合变量。在C++中,union关键字不是必需的:

union DATATYPE var2;   // C声明联合变量

DATATYPE var3;         // C++声明联合变量

联合类型的变量可以保存联合中声明的任何类型的一个值。使用成员选择操作符(.)访问联合的成员:

var1.i = 6;           // 变量是整数
var2.d = 5.327; // 变量是双精度

你可以在声明联合的同时,使用赋值表达式(包含在括号内)进行初始化。 表达式被计算成值并赋给联合的第1个字段。

举例

// using_a_union.cpp
#include <stdio.h> union NumericType
{
int iValue;
long lValue;
double dValue;
}; int main()
{
union NumericType Values = { 10 }; // iValue = 10
printf_s("%d\n", Values.iValue);
Values.dValue = 3.1416;
printf_s("%f\n", Values.dValue);
}

输出

10

3.141600

数值类型的联合在内存中的排列(原理性)如下图所示:

数值类型联合的数据存储

注:

可以看到,分配的最大的数据类型的空间。

如果,有a[100]的成员,就会分配4*100(如int大小为4)。

C/C++:Unions 联合的更多相关文章

  1. Apache Avro总结

    参考 Apache Avro™ 1.9.0 Specification Avro介绍 小而巧的数字压缩算法:zigzag   原始类型(Primitive Types) 类型名 描述 描述 二进制编码 ...

  2. Dynamics CRM 之ADFS 使用 WID 的独立联合服务器

    ADFS 的使用 WID 的独立联合服务器适用于自己的测试环境,常用的就是在虚机中使用. 拓扑图如下: wID:联合身份验证服务配置为使用 Windows 内部数据库

  3. Dynamics CRM 之ADFS 使用 WID 的联合服务器场

    使用 WID 的联合服务器场 默认拓扑 Active Directory 联合身份验证服务 (AD FS) 是联合服务器场,使用 Windows 内部数据库 (WID). 在这种拓扑, AD FS 使 ...

  4. Hibernate(5)—— 联合主键 、一对一关联关系映射(xml和注解) 和 领域驱动设计

    俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: One to One 映射关系 一对一单向外键(XML/Annotation) 一对一双向外键关联(XML/A ...

  5. Federated Identity Pattern 联合身份模式

    Delegate authentication to an external identity provider. This pattern can simplify development, min ...

  6. [占位-未完成]scikit-learn一般实例之十一:异构数据源的特征联合

    [占位-未完成]scikit-learn一般实例之十一:异构数据源的特征联合 Datasets can often contain components of that require differe ...

  7. SQL联合查询:子表任一记录与主表联合查询

    今天有网友群里提了这样一个关于SQL联合查询的需求: 一.有热心网友的方案: 二.我的方案: select * from ( select a.*,(select top 1 Id from B as ...

  8. Dynamics CRM 之ADFS 使用 SQL Server 的联合服务器场

    此拓扑用于 Active Directory 联合身份验证服务 (AD FS) 不同于使用 Windows 内部数据库 (WID) 部署拓扑,因为不会将数据复制到每台联合服务器场中的联合身份验证服务器 ...

  9. Dynamics CRM 之ADFS 使用 WID 和代理的联合服务器场

    为此部署拓扑 Active Directory 联合身份验证服务 (AD FS) 等同于联合服务器场与 Windows 内部数据库 (WID) 拓扑中,但它将代理服务器计算机添加到外围网络,以支持外部 ...

随机推荐

  1. Android高清巨图加载方案

    1.今天看了鸿洋的<Android高清巨图加载方案>一文,对加载高清巨图时的解决方案有了一定的认识. 思路为: 提供一个设置图片的入口. 重写onTouchEvent,在里面根据用户移动的 ...

  2. Asp.Net 控件radio 的简单使用

    js: <script type="text/javascript"> function ok() { document.getElementById("tx ...

  3. CommandBehavior.CloseConnection的使用

    CommandBehavior.CloseConnection的使用 分析问题 由于流模式读取数据库的特点,在具体应用时很难确定数据库连接何时才能被关闭,因为读取的动作是连续进行的,下面是一个常见的数 ...

  4. strcpy and memcpy

    1. Inconsist length. char a3[2]; char *a = "Itis   " strcpy(a3, a); It is wrong. a3 will b ...

  5. iOS开发中的Html解析方法

    iOS开发中的Html解析方法 本文作者为大家介绍了在iOS开发中的Html解析方法,并同时提供了Demo代码的下载链接,Demo 解析了某个网站(具体可在代码中查看)的html网页,提取了图片以及标 ...

  6. 《javascript权威指南》第9章 例9-8源码

    //创建一个新的枚举类型 //不能使用它来创建该类型的新实例 function Enumeration(nameToValues){ var Enumeration = function(){thro ...

  7. 十分钟让你的ASP.NET MVC网站变成PHP

    昨天从网上看来的,某个人发的方法: 第一:修改一下路由: 把RouteConfig中的: routes.MapRoute( name: "Default", url: " ...

  8. Qt creator 常用的快捷健

    Qt creator 常用的快捷健 F1        查看帮助F2        跳转到函数定义(和Ctrl+鼠标左键一样的效果)Shift+F2    声明和定义之间切换F4        头文件 ...

  9. Android中写入读取XML

    获取XML文件的基本思路是,通过getResources().getXml()获的XML原始文件,得到XmlResourceParser对象,通过该对象来判断是文档的开头还是结尾,是某个标签的开始还是 ...

  10. BrainFuck语言生成器

    还要求生成的代码比较快和短. 当然stackexchange上面给出了实现,java的 http://codegolf.stackexchange.com/questions/5418/brainfu ...