union

关键字

1. 共用体声明和共用体变量定义
共用体(参考“共用体”百科词条)是一种特殊形式的变量,使用关键字union来定义
共用体(有些人也叫"联合")声明和共用体变量定义与结构体十分相似。其形式为:
union 共用体名{
数据类型 成员名;
数据类型 成员名;
...
} 变量名;
共用体表示几个变量共用一个内存位置,在不同的时间保存不同的数据类型和不同长度的变量。在union中,所有的共用体成员共用一个空间,并且同一时间只能储存其中一个成员变量的值。
下例表示声明一个共用体foo:
union foo{
int i;
char c;
double k;
};
再用已声明的共用体可定义共用体变量。
例如用上面说明的共用体定义一个名为bar的共用体变量, 可写成:
union foo bar;
在共用体变量bar中, 整型变量i和字符变量c共用同一内存位置。
当一个共用体被声明时, 编译程序自动地产生一个变量, 其长度为联合中最大的变量长度的整数倍。以上例而言,最大长度是double数据类型,所以foo的内存空间就是double型的长度。
union foo
{
char s[10];
int i;
};
在这个union中,foo的内存空间的长度为12,是int型的3倍,而并不是数组的长度10。若把int改为double,则foo的内存空间为16,是double型的两倍。
它的内存大小与struct的类似,可以参考一下。
由于union的数据成员共用一个内存空间,所以必须存取正确的成员才能正确的读取变量值,可以使用一个额外的变数或列举型态来记录最后一次使用空间的是哪个成员,例如:
#include <iostream>
using namespace std;
union StateMachine {
public:
char character;
int number;
char *str;
StateMachine(char c) {
character = c;
}
StateMachine(int n) {
number = n;
}
StateMachine(char* s) {
str = s;
}
};
enum State {character, number, str};
int main() {
State state = character;
StateMachine machine('J');
...
if(state == character)
cout << machine.character << endl;
...
return 0;
}
另外要注意的是,union的成员不可以为静态、引用,如果是自订型态的话,该自订型态成员不可以有建构函式、解构函式或是复制指定运算子。
2. 共用体和结构体的区别
共用体和结构体有下列区别:
1. 共用体和结构体都是由多个不同的数据类型成员组成, 但在任何同一时刻, 共用体只存放了一个被选中的成员, 而结构体的所有成员都存在。
2. 对于共用体的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于结构体的不同成员赋值是互不影响的。

转载于:https://www.cnblogs.com/vanishfan/p/3269882.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/377920.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SEL

Object-C 中的Selector 概念 Andrew Huang <bluedrum163.com> 转载请注明作者和联络方式 在iphone程序中会大量看到selector这样的用法。<<iphone开发基础>花了很大一个篇幅来解析这个语法&#xff0c;但是不知 是翻译问题&#xff0c;还是解释过细&#xff0c…

Java Calendar add()方法与示例

日历类的add()方法 (Calendar Class add() method) add() method is available in java.util package. add()方法在java.util包中可用。 add() method is used to perform add or subtract the given amount of time to the given cal_fi (calendar field). add()方法用于对指定…

三、线性回归实验分析

所有代码块都是在Jupyter Notebook下进行调试运行&#xff0c;前后之间都相互关联。 文中所有代码块所涉及到的函数里面的详细参数均可通过scikit-learn官网API文档进行查阅&#xff0c;这里我只写下每行代码所实现的功能&#xff0c;参数的调整读者可以多进行试验调试。多动手…

leetcode 236. 二叉树的最近公共祖先 思考分析

目录题目思考分析改进本文章代码思路来源于公众号【代码随想录】题目 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&#xff0c;最近公共祖先表示为一个结点 x&#xff0c;满足 x 是 p、…

轻轻松松给PCB板添加LOGO

在 PCB 图中放置汉字或图形的方法&#xff1a;A、文字——> 图片——> PCB 图——> 复制到自己作品中B、图片——> PCB 图——> 复制到自己作品中1、首先准备好“BMP”格式的图片&#xff0c;在图片中依靠颜色分辨图层&#xff0c;所以最好准备“单色黑白”图。…

java bitset_Java BitSet clone()方法及示例

java bitsetBitSet类clone()方法 (BitSet Class clone() method) clone() method is available in java.util package. clone()方法在java.util包中可用。 clone() method is used to clone this Bitset or in other words, this method is used to create a Bitset that is si…

小技巧

//屏蔽下拉框的某一个选项 <disabled"disable">... 1 <html>2 <body>3 4 <select>5 <option>Volvo</option>6 <option>Saab</option>7 <option disabled"disabled">Mercedes</option>…

jquery中text val html attr的差别

html和innerHTMl是一样的&#xff0c;可以获得和设置html标签文本如&#xff1a;设置值&#xff1a;$("p").html("<span stylefont-size:13px;color:red>HTML标签文本</span>"); 获得值&#xff1a;$("p").html(); text和innerText是…

leetcode 235. 二叉搜索树的最近公共祖先 思考分析

目录题目思考迭代法题目 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&#xff0c;最近公共祖先表示为一个结点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff0…

四、逻辑回归

逻辑回归logistic_regression(LR)其实是分类算法&#xff0c;而不是回归算法。 回归算法得到的是一个数&#xff0c;分类算法得到的是几个不同的类别。 逻辑回归就是通过函数将值转换为0-1之间&#xff0c;形成概率问题&#xff0c;从而实现了不同类别的分类。 Sigmoid 函数 …

db,dbms,dba_DBMS中的数据库管理员(DBA)

db,dbms,dba数据库管理员(DBA) (Database Administrator (DBA)) To use the Database Management System, it is necessary to have central control over data and programs together in order to access such data. A person who has central control over such system is re…

运算符优先级

转载于:https://www.cnblogs.com/c-cloud/p/3280911.html

五、逻辑回归实验分析

所有代码块都是在Jupyter Notebook下进行调试运行&#xff0c;前后之间都相互关联。 文中所有代码块所涉及到的函数里面的详细参数均可通过scikit-learn官网API文档进行查阅&#xff0c;这里我只写下每行代码所实现的功能&#xff0c;参数的调整读者可以多进行试验调试。多动手…

二叉搜索树的插入、删除、修剪、构造操作(leetcode701、450、669、108)

目录1、leetcode 701. 二叉搜索树中的插入操作1、题目2、递归法3、迭代法2、leetcode 450. 二叉搜索树中的插入操作1、题目2、思路递归法3、迭代法4、删除结点的两个方法以及注意点3、leetcode 669. 修剪二叉搜索树1、题目2、思考与递归3、迭代法4、leetcode 108. 将有序数组转…

Memcached查看和清理

1.一种telnet localhost 11211 #登陆stats #查看状态flush_all #清理quit #退出2.又学到一个:echo flush_all | nc localhost 112113.1、数据存储(假设key为test,value为12345) printf "set test 0 1 5\r\n12345\r\n" | nc localhost 11211STORED2.数据取回(假设key为…

模拟退火算法解决np_P和NP问题与解决方案| 演算法

模拟退火算法解决npP问题 (P Problems) P is the set of all the decision problems solvable by deterministic algorithms in polynomial time. P是多项式时间内确定性算法可解决的所有决策问题的集合。 NP问题 (NP Problems) NP is the set of all the decision problems t…

POJ2251Dungeon Master

http://poj.org/problem?id2251 题意 &#xff1a; 就是迷宫升级版&#xff0c;从以前的一个矩阵也就是一层&#xff0c;变为现在的L层&#xff0c;" . "是可以走&#xff0c;但是“#”不可以走&#xff0c;从S走到E&#xff0c;求最短的路径&#xff0c;若是找不到…

六、聚类算法

一、聚类概念 1&#xff0c;通俗易懂而言&#xff0c;聚类主要运用于无监督学习中&#xff0c;也就是将没有标签的东西如何分为几堆儿。 2&#xff0c;无监督学习即没有标签&#xff0c;不知道这些玩意到底是啥。当然&#xff0c;有监督学习就是由标签&#xff0c;我们是提前知…

Apache服务器通过.htaccess文件设置防盗链

用户经常面对的一个问题就是服务器的流量问题&#xff0c;而站点文件被盗链是其中最为主要的部分。所谓盗链&#xff0c;是指其他网站直接链接我们网站上的文件&#xff0c;一般来 说&#xff0c;盗链的对象大多为很耗带宽的大体积文件&#xff0c;如图片、视频等。这样造成的后…

【C++grammar】string类和array类

目录1、C11的string类1、创建 string 对象2、追加字符串append函数3、为字符串赋值assign函数4、at, clear, erase, and empty函数5、比较字符串compare()6、获取子串at() 、substr()函数7、搜索字符串find()8、插入和替换字符串insert() 、replace()9、字符串运算符10、string…