C/C++:Unions 联合
来源:互联网 发布:linux运维书籍推荐 编辑:程序博客网 时间:2024/05/23 00:04
原文: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.cppunion 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 = 10 printf_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 联合
- C - Unions
- C联合
- ARC forbids Objective-C objects in structs or unions
- ARC forbids Objective-C objects in structs or unions
- Pointers on C——10 Structures and Unions.1
- Pointers on C——10 Structures and Unions.2
- Pointers on C——10 Structures and Unions.3
- Pointers on C——10 Structures and Unions.4
- Pointers on C——10 Structures and Unions.5
- Pointers on C——10 Structures and Unions.6
- Pointers on C——10 Structures and Unions.7
- Pointers on C——10 Structures and Unions.8
- Pointers on C——10 Structures and Unions.9
- Pointers on C——10 Structures and Unions.10
- Pointers on C——10 Structures and Unions.11
- Pointers on C——10 Structures and Unions.12
- Pointers on C——10 Structures and Unions.13
- 使用adb shell命令发送按键
- 趣题 CodeForces 111B题解
- NYOJ 205 求余数
- Tomcat中webapps下的项目如何导入到eclipse中
- Struts2常用标签总结
- C/C++:Unions 联合
- 开源CMS赏析
- IOS开发学习笔记(十四)——处理视频
- 域环境相关命令
- Android System进程启动流程
- mfc中文乱码
- 养老保险缴费率上调 谁来买单?
- FFMPEG新版本的一些使用问题
- 检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 8000401a