[C++]union用法

摘自cplusplus.com上关于union的解释:

Unions allow one portion of memory to be accessed as different data types. Its declaration and use is similar to the one of structures, but its functionality is totally different:
unions允许一部分内存可以访问不同的数据类型。他的声明和使用和结构体相同,但是他的功能却完全不同。

union type_name {
  member_type1 member_name1;
  member_type2 member_name2;
  member_type3 member_name3;
  .
  .
} object_names;

This creates a new union type, identified by type_name, in which all its member elements occupy the same physical space in memory. The size of this type is the one of the largest member element. For example:

上面定义了一个union类型,由type_name声明,他的数据成员拥有相同的内存空间。这种数据类型的大小和他最大的元素相同,举例来说:

12345
union mytypes_t {
  char c;
  int i;
  float f;
} mytypes;
 

declares an object (mytypes) with three members:
声明了一个有三个成员的对象:

123
mytypes.c
mytypes.i
mytypes.f
 

Each of these members is of a different data type. But since all of them are referring to the same location in memory, the modification of one of the members will affect the value of all of them. It is not possible to store different values in them in a way that each is independent of the others.

每个成员都是不同的数据类型。但是由于他们指向相同的内存单元,对他们中任意一个成员的修改都会对其他成员产生影响。
One of the uses of a union is to be able to access a value either in its entirety or as an array or structure of smaller elements. For example: 
union的一个用处是他能够以真题或者数组或者结够的形式来访问数据(在这个例子中)。举例来说:

12345678
union mix_t {
  int l;
  struct {
    short hi;
    short lo;
    } s;
  char c[4];
} mix;
 

If we assume that the system where this program runs has an int type with a size of 4 bytes, and a short type of 2 bytes, the union defined above allows the access to the same group of 4 bytes: mix.lmix.s and mix.c, and which we can use according to how we want to access these bytes: as if they were a single value of type int, or as if they were two values of type short, or as an array of char elements, respectively. The example mixes types, arrays, and structures in the union to demonstrate different ways to access the data. For a little-endian system, this union could be represented as:

如果我们假定系统运行int类型4个字节,short类型2个字节,上面定义允许访问4个字节的数组:mix.l,mix.s,mix.c,我们可以按照我们的想法来访问这些字节:分别访问int、short的两个数据、char数组。这个例子混合了类型、数组和结构在union中来说明不同的方法来访问数据。对于小端系统,union可以表示为下面的形式:

 
The exact alignment and order of the members of a union in memory depends on the system, with the possibility of creating portability issues.

对于不同的系统数据的顺序和对齐可能会不同。

另附一个中文blog,有更详细的代码例子:http://www.jb51.net/article/56009.htm

时间: 2024-10-23 08:46:15

[C++]union用法的相关文章

sql的union用法

sql中union是很常见的,尤其是创建视图时,完全离不开union. SQL UNION 操作符合并两个或多个 SELECT 语句的结果,UNION 内部的每个 SELECT 语句必须拥有相同数量的列.列也必须拥有相似的数据类型.同时,每个 SELECT 语句中的列的顺序必须相同. union包括union和union all两种语法,如下: SQL UNION 语法 SELECT column_name(s) FROM table1 UNION SELECT column_name(s) F

C语言中的union用法

union共用声明和共用一变量定义: "联合"是一种特殊的类,也是一种构造类型的数据结构.在一个"联合"内可以定义多种不同的数据类型, 一个被说明为该"联合"类型的变量中,允许装入该"联合"所定义的任何一种数据,这些数据共享同一段内存, 以达到节省空间的目的(还有一个节省空间的类型:位域). 这是一个非常特殊的地方,也是联合的特征. 另外,同struct一样,联合默认访问权限也是公有的,并且,也具有成员函数. 共用体(参考&q

oracle union 用法

[sql] view plaincopyprint?众所周知的几个结果集集合操作命令,今天详细地测试了一下,发现一些问题,记录备考. 假设我们有一个表Student,包括以下字段与数据: drop table student; create table student ( id int primary key, name nvarchar2(50) not null, score number not null ); insert into student values(1,'Aaron',78

SQL 基础:Select语句,各种join,union用法

一.基本的SELECT语句 1. “*”的注意事项:在SELECT语句中,用*来选取所有的列,这是一个应该抵制的习惯. 虽然节省了输入列名的时间,但是也意味着获得的数据比真正需要的数据多的多.相应的,也会降低应用程序的性能及网络性能. 良好的规则是只选所需. 2. join子句 join是用来定义如何从多个表中选取数据并组合成一个结果集. join必需是因为(1)我们所要获取的所有信息并不都在一个表中,或者(2)所要返回的信息都在一个表中,但是其上设置的条件信息却在另一个表中. join的共同点

C/C++ union用法

在C/C++程序的编写中,当多个基本数据类型或复合数据结构要占用同一片内存时,我们要使用联合体:当多种类型,多个对象,多个事物只取其一时(我们姑且通俗地称其为"n 选1"),我们也 可以使用联合体来发挥其长处.首先看一段代码: <pre name="code" class="cpp">union myun { struct { int x; int y; int z; }u; int k; }a; int main() { a.u.x

Union用法及说明:

Union是用户合并多个select结果集的操作符,需要注意的是:select语句需要有相同的列数,类似的数据类型,且列的顺序相同,另外,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名.Union和Union All区别:默认Union会取出不同的值,如果你也想取出重复的值就用Union All, 原文地址:https://www.cnblogs.com/lxwphp/p/8328842.html

MySQL UNION 与 UNION ALL 语法与用法

1.MySQL UNION 语法 MySQL UNION 用于把来自多个 SELECT 语句的结果组合到一个结果集合中.语法为: SELECT column,... FROM table1 UNION [ALL] SELECT column,... FROM table2 ... 在多个 SELECT 语句中,对应的列应该具有相同的字段属性,且第一个 SELECT 语句中被使用的字段名称也被用于结果的字段名称. 1.1.UNION 与 UNION ALL 的区别 当使用 UNION 时,MySQ

Oracle 中union的用法

UNION 指令的目的是将两个 SQL 语句的结果合并起来,可以查看你要的查询结果. 例如: SELECT Date FROM Store_Information UNION SELECT Date FROM Internet_Sales 注意:union用法中,两个select语句的字段类型匹配,而且字段个数要相同,如上面的例子,在实际的软件开发过程,会遇到更复杂的情况,具体请看下面的例子 select  '1' as type,FL_ID,FL_CODE,FL_CNAME,FLDA.FL_P

SQL中MINUS的用法

minus指令是运用在两个 SQL 语句上.它先找出第一个 SQL 语句所产生的结果,然后看这些结果有没有在第二个 SQL 语句的结果中.如果有的话,那这一笔资料就被去除,而不会在最后的结果中出现.如果第二个 SQL 语句所产生的结果并没有存在于第一个 SQL 语句所产生的结果内,那这笔资料就被抛弃. MINUS 的语法如下: [SQL 语句 1] MINUS [SQL 语句 2] 我们继续使用一样的例子: Store_Information 表格 store_name  Sales  Date