原文: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. 编译recovery及过程中的部分错误解决

    你必须使用32位或64位Ubuntu系统,关于如何建立编译环境和同步源码的指导,请自己查找有关指导的文章. 1, 安装所需要的包 2, 建立编译的环境,并同步CWM所需的源码,CyanogenMod源 ...

  2. 伟福与Keil的比较--51汇编提高篇

    [写在前面] 本文适合有一定汇编水平的人(了解大半的汇编语句,能区分全角与半角符号,能够独立编写流水灯.数码管等程序),传授51单片机的汇编语言经验.如果您发现不少指令不知道意思,请从网上搜索入门教程 ...

  3. Cmake 脚本对项目输出路径和输出头文件的路径定义

    对Lib项目的统一输出路径以下时解决方案: set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/Lib)set(CMAKE_LIBRARY_O ...

  4. Linux 文件名匹配

    As the shell reads each line, it "handles" any special characters. This includes variable ...

  5. Linux企业级项目实践之网络爬虫(15)——区分文本文件和二进制文件

    HTTP协议支持文本和二进制文件传输.最常见的html格式的页面即文本,图片.音乐等为二进制文件.我们要对这两类文件加以区分并分别处理. static char * BIN_SUFFIXES = &q ...

  6. 图论:2-SAT模板

    #include<cstdio> #include<vector> #include<cstring> using namespace std; const int ...

  7. C++ double类型转string类型后,怎么实现小数点后只显示一个数字

    C++ double类型转string类型后,怎么实现小数点后只显示一个数字 #include <iostream> #include <sstream> #include & ...

  8. day55

    担心了好久的编译原理也总是考完了 大学里的最后一次考试也是结束罗 这次的考试起伏跌宕啊 我们本来是9点钟开始考试 但是我们班的几个同学基本上7点钟就去了 为了什么?? 选个好的位置撒哈哈,到了九点,老 ...

  9. AndroidStudio常见提示

    Required:请求的是String字符串 .     Found:   et.getText()返回的是text.Editable

  10. <php>上传文件的程序

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...