union

Posted Lunais

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了union相关的知识,希望对你有一定的参考价值。

union是C++中一个类,平时自己用的比较少,了解了一些特性后觉得在内存要求比较高的地方还是大有可为,总结一下。

C++中的struct和union内部都可以定义 数据 和 函数, 两个跟 class不同的地方在于访问控制上面,class默认为private,struct和union默认为public.

联合体的特点在于:

1、几个变量共用一个内存位置,每一时刻都只有一个变量存在(想一个瓶子一样,可以放一瓶水和一瓶咖啡,但每次只能有一种存在)

2、求共用体变量的大小:a.保证能存在最长的那个变量;b.考虑内存对齐时,共用体变量的大小是 类型最大的变量 的整数倍。

eg.

union foo/*“共用”类型“FOO”*/
{
    chars[10];    /*“字符”类型的数组“S”下面有“10”个元素*/
    int i;        /*“整数”类型i*/ 
};

在这个union中,foo的内存空间的长度为12,是int型的3倍,保证恰好能放下数组的长度10。

另外要注意的是,union的成员不可以为静态、引用,他们的内存位置与栈中变量有差别。

共用体和结构体有下列区别:
1. 共用体和结构体都是由多个不同的数据类型成员组成, 但在任何同一时刻, 共用体只存放了一个被选中的成员, 而结构体的所有成员都存在。
2. 对于共用体的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于结构体的不同成员赋值是互不影响的。
#include <stdio.h>
 void main()
 {
     union number{ /*定义一个联合*/
         int i;
         struct
         { /*在联合中定义一个结构*/
             char first;
             char second;
         }half;
     }num;
 
 num.i=0x4241; /*联合成员赋值*/
 printf("%c%c\n", num.half.first, num.half.second);   //AB
 
 num.half.first=a; /*联合中结构成员赋值*/
 num.half.second=b;
 printf("%x\n", num.i);                               //6261
 
 getchar();
 }

 

 

 

 

 

 

 

 

 

 

 

 

 

以上是关于union的主要内容,如果未能解决你的问题,请参考以下文章

c++ union学习

sql 查询结果合并union all用法_数据库技巧

使用 with as 优化SQL

臃肿的 UNION ALL 代码 (MYSQL)

UNION和UNION ALL的作用和语法

Union和Union All 的区别