C-union的使用

union有两个作用:

1,节约空间,如果一个struct存在两个互斥的变量,则可以把这个struct变成union

2,将同一个内存作为多种解释

代码:

 1 #include <iostream>
 2 using namespace std;
 3
 4 //作用1,如果只是存a,20000000 个s_tag节约20M空间
 5 union s_tag { int a[100];
 6 char aaa; };
 7 s_tag fa, sa, ua;
 8 s_tag multiple(s_tag s) {
 9     int j;
10     for(j = 0; j < 100; j++)
11         s.a[j] *= 2;
12     return s;
13 }
14
15 //作用2,将同样一块32位内存解释为int或者分为四块解释为char
16 union bit32_tag{
17     int whole;
18     struct {char c0, c1, c2, c3; } byte;
19 } v;
20
21 int main() {
22     fa.aaa = ‘a‘;
23     //for(int j = 0; j < 100; j++)
24     //    fa.a[j] = j;
25     for(int j = 0; j < 100; j++)
26         cout << fa.a[j] << endl;
27     cout << "aaa:" << fa.aaa << endl;
28
29     //‘A‘
30     v.whole = 65;
31     cout << "v.byte.c0: " << v.byte.c0 << endl;
32     cout << "v.byte.c1: " << v.byte.c1 << endl;
33     cout << "v.byte.c2: " << v.byte.c2 << endl;
34     cout << "v.byte.c3: " << v.byte.c3 << endl;
35
36     return 0;
37 }

输出:

97
..
...
....
0
0
aaa:a
v.byte.c0: a
v.byte.c1:
v.byte.c2:
v.byte.c3:

C-union的使用,布布扣,bubuko.com

时间: 2024-12-08 15:01:39

C-union的使用的相关文章

spark 教程三 spark Map filter flatMap union distinct intersection操作

RDD的创建 spark 所有的操作都围绕着弹性分布式数据集(RDD)进行,这是一个有容错机制的并可以被并行操作的元素集合,具有只读.分区.容错.高效.无需物化.可以缓存.RDD依赖等特征 RDD的创建基础RDD 1.并行集合(Parallelized Collections):接收一个已经存在的Scala集合,然后进行各种并行运算 var sc=new SparkContext(conf) var rdd=sc.parallelize(Array(2,4,9,3,5,7,8,1,6)); rd

哈希(4) - 求两个链表的交集(intersection)以及并集(union)

给定两个链表,求它们的交集以及并集.用于输出的list中的元素顺序可不予考虑. 例子: 输入下面两个链表: list1: 10->15->4->20 list2: 8->4->2->10 输出链表: 交集list: 4->10 并集list: 2->8->20->4->15->10 方法1 (简单方法) 可以参考链表系列中的"链表操作 - 求两个链表的交集(intersection)以及并集(union)" 方法2

Union函数

. 共用体声明和共用体变量定义 共用体(参考“共用体”百科词条)是一种特殊形式的变量,使用关键字union来定义 共用体(有些人也叫"联合")声明和共用体变量定义与结构体十分相似.其形式为: union 共用体名{ 数据类型 成员名; 数据类型 成员名; ... } 变量名; 共用体表示几个变量共用一个内存位置,在不同的时间保存不同的数据类型和不同长度的变量.在union中,所有的共用体成员共用一个空间,并且同一时间只能储存其中一个成员变量的值. 下例表示声明一个共用体foo: uni

LINQ to SQL 中 Concat、Union、Intersect、Except 方法的使用

?  前言 LINQ to SQL 中需要对两个或多个数据集进行操作,比如:合并.取交集等,主要使用下面四个方法,这四个方法都是 System.Linq.IQueryable<out T> 接口的扩展方法,并且都是延迟加载方法,下面是使用的简单示例. ?  示例数据,数据表:Subject(科目表).Score(成绩表) 1.   Concat() 方法 1)   方法声明 public static IQueryable<TSource> Concat<TSource>

MySQL笔记-union

union语法 select ... union [all | distinct] selct ... union用于把来自多个select语句的结果组合在一个结果集中. 两次查询的列表必须相同,否则报[The used SELECT statements have a different number of columns] 多个select语句取出的字段名可以不同,不会报错,但是最后的结果集中显示时,以第一个select语句的字段名为准. 多个select语句中取出相同数据时,union会将

LINQ to SQL语句Concat/Union/Intersect/Except--2017年2月22日

Concat/Union/Intersect/Except操作 适用场景:对两个集合的处理,例如追加.合并.取相同项.相交项等等. Concat(连接) 说明:连接不同的集合,不会自动过滤相同项:延迟. 1.简单形式: var q = ( from c in db.Customers select c.Phone ).Concat( from c in db.Customers select c.Fax ).Concat( from e in db.Employees select e.Home

14.UNION 和 UNION ALL 操作符

union all   union UNION 操作符用于合并两个或多个 SELECT 语句的结果集.请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列.列也必须拥有相似的数据类型.同时,每条 SELECT 语句中的列的顺序必须相同. CREATE TABLE Employees_China(   E_ID   INT              NOT NULL,    E_Name  CHAR (25)              NOT NULL); CREATE TABLE

SqlSever基础 union 将得到的横表变为纵表

镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ 1 base code 1 use master 2 drop database helloworld 3 4 --创建一个数据库 5 create database helloworld 6 7 --用helloworld1这个数据库 8 use helloworld 9 10 --创建一个表格

数据库中union 与union all 的区别

union 将两个表连接后删除其重复的项: union all 将两个表连接都不删除其重复的项. 数据库中,UNION和UNION ALL都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同. UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果.实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表UNION.如: select * from users1 union select * from user2 这个

漫谈C语言结构体struct、公用体union空间占用

先用代码说话: #include<stdio.h> union union_data0{ int a ;//本身占用4个字节 char b ;//本身占用1个字节 int c ; }; union union_data1{ short a;//本身占用2个字节 char b[13];//本身占用13个字节 int c ;//本身占用4个字节 }; struct struct_data{ int a ;//int本身占用4个字节,偏移量为0 char b ;//char本身占用1个字节,偏移量为