原文: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 = 10printf_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. 汇编语言常见错误(转载)

    中英文对照-masm编译时错误性息提示 方便一下喜欢汇编的人,里面有一些错误,望牛人帮忙改正. ml.exe错误性息 FATAL     严重错误 cannot open file   不能打开文件  ...

  2. Laravel Database——查询构造器与语法编译器源码分析 (上)

    前言 在前两个文章中,我们分析了数据库的连接启动与数据库底层 CRUD 的原理,底层数据库服务支持原生 sql 的运行.本文以 mysql 为例,向大家讲述支持 Fluent 的查询构造器 query ...

  3. TypeScript基础入门之高级类型的可辨识联合(Discriminated Unions)

    2019独角兽企业重金招聘Python工程师标准>>> 转发 TypeScript基础入门之高级类型的可辨识联合(Discriminated Unions) 高级类型 可辨识联合(D ...

  4. 匿名联合(Anonymous unions)

    Anonymous unions-匿名联合 在 C++ 我们可以选择使联合(union)匿名.如果我们将一个 union 包括在一个结构(structure)的定义中,并且不赋予它对象(object) ...

  5. C/C++编程: Anonymous unions(匿名联合)

    在结构体中,可以声明某个联合而不用指出名字,这样可以直接使用联合的成员,就像它们是结构中的成员一样 在 C++ 我们可以选择使联合(union)匿名.如果我们将一个 union 包括在一个结构(str ...

  6. typescript 文档阅读笔记-Unions and Intersection Types

    Union Types 用来组合不同类型 let name: string | number Unions with Common Fields 如果某个值的类型是一个联合类型.那么我们只能访问他们公 ...

  7. 关于Avro中的Unions类型

    Avro中的复杂类型 Avro支持六种复杂类型: records enums arrays maps unions fixed Unions类型介绍 Unions使用JSON数组表示. 例如,[&qu ...

  8. 解决keil_mdk编译error: #3092: anonymous unions are only supported in --gnu mode

    extern struct STRUCT_USARTx_Fram {char Data_RX_BUF[RX_BUF_MAX_LEN];union {__IO uint16_t InfAll;struc ...

  9. anonymous unions are only supported in --gnu mode, or when enabled with #pragma anon_unions

    打算移植下littleVgl这个GUI的,编译出现了anonymous unions are only supported in --gnu mode, or when enabled with #p ...

最新文章

  1. Python之pandas:将dataframe数据写入到xls表格的多个sheet内(防止写入数据循环覆盖sheet表)
  2. make and run
  3. laravel中使用的PDF扩展包——laravel-dompdf和laravel-snappy
  4. LINUX基本指令、NGINX负载均衡基本操作与解释
  5. 说文解字 —— 拆字
  6. 自学python编程笔记本推荐-这件神器,每个 Python入门学习者都值得一试
  7. openstack服务启动之nova-compute
  8. 【网络安全】大学信息安全技术 期末考试复习题
  9. C#昵图素材下载器源码可下我图、包图、千图等(带数据库)
  10. segger 烧写superboot
  11. C 什么是句柄?为什么会有句柄?HANDLE
  12. 所有的IT男都会蛮光头?来看看编程语言之父们的头发
  13. wamp mysql 密码_wamp如何设置数据库的密码
  14. 算法思考题-三只老鼠找8瓶毒药思路(个人思考+收集)
  15. ubuntu批量压缩文件夹
  16. mysql 破坏索引_mysql表索引被破坏的问题及解决
  17. C语言 crc32校验算法原理,CRC循环冗余校验的实现原理
  18. hadoop start journalnode小坑
  19. oracle游标列转行,Oracle行转列和列转行
  20. ZZ-今天比较烦,贴上比较喜欢的让子弹飞的两篇评论吧。

热门文章

  1. 【洛谷入门】P7659 [COCI2014-2015#5] FUNGHI
  2. (JZ4245)2019.01.29【NOIP提高组】模拟B组 1.er(混沌与秩序)
  3. Java七武器----排序算法之堆排序
  4. 奥哲·云枢:更低代码,更快数字化
  5. 总结调用PCL库函数出现的各种报错
  6. 从P2P监管细则 看电子签名发展未来
  7. 整车电子电气架构EEA学习之路-2
  8. 细说嵌入式教程的坑——小白学ARM(三)
  9. java实现数据范围切片工具方法
  10. windows.open()用法简介