C++学习8:共用体union
2017-08-12 18:02
218 查看
今天来学习一下共用体union。
共用体可以让不同类型的变量共用同一内存单元,用来节省内存,主要用于嵌入式系统编程、操作系统数据结构或硬件数据结构。
1、共用体可以存储多种类型的变量,但同时只能存储不同类型变量中的一种。
例如:
可以看到,共用体和结构体格式基本相同。这里共用体data,可以存储int、char、double三种数据类型的变量。
2、不同数据类型的变量共用同一段内存单元,新的成员写入会覆盖旧的成员。
例如:
结果如下
这里首先给a.i赋值为98,我们可以看到,输出a.ch为b,b的ASCII码为98,也就是说a.ch和a.i对应的是相同的内存单元。然后给a.ch赋值为’a’,输出a.i为97,对应a的ASCII码。
3、共用体的长度等于其最大成员的长度。
例如:
结果如下:
可以看到,为了有足够空间存储三种不同的成员,a的大小等于最大成员f的大小。
4.共用体和结构体可以相互嵌套。
共用体和结构体可以相互嵌套,用法两者是相同的。
例如:
结果如下:
这里有一个匿名用法,将上述例子改为匿名结构体形式:
结果和刚才相同。这里共用体中嵌套的结构体没有名称(注意名称在struct之后定义),这样结构体的成员就直接成为了共用体的成员。
共用体可以让不同类型的变量共用同一内存单元,用来节省内存,主要用于嵌入式系统编程、操作系统数据结构或硬件数据结构。
1、共用体可以存储多种类型的变量,但同时只能存储不同类型变量中的一种。
例如:
union data { int i; char ch; double f; } ;
可以看到,共用体和结构体格式基本相同。这里共用体data,可以存储int、char、double三种数据类型的变量。
2、不同数据类型的变量共用同一段内存单元,新的成员写入会覆盖旧的成员。
例如:
#include<iostream> #include<math.h> using namespace std; int main(void) { union data { int i; char ch; double f; } a; a.i = 98; cout << "a.ch:" << a.ch << endl; a.ch = 'a'; cout << "a.i :" << a.i << endl; system("pause"); }
结果如下
a.ch:b a.i :97 请按任意键继续. . .
这里首先给a.i赋值为98,我们可以看到,输出a.ch为b,b的ASCII码为98,也就是说a.ch和a.i对应的是相同的内存单元。然后给a.ch赋值为’a’,输出a.i为97,对应a的ASCII码。
3、共用体的长度等于其最大成员的长度。
例如:
#include<iostream> #include<math.h> using namespace std; int main(void) { union data { int i; char ch; double f; } a; cout << "sizeof(a.i) = " <<sizeof(a.i) << endl; cout << "sizeof(a.ch) = " <<sizeof(a.ch) << endl; cout << "sizeof(a.f) = " <<sizeof(a.f) << endl; cout << "sizeof(a) = " <<sizeof(a) << endl; system("pause"); }
结果如下:
sizeof(a.i) = 4 sizeof(a.ch) = 1 sizeof(a.f) = 8 sizeof(a) = 8 请按任意键继续. . .
可以看到,为了有足够空间存储三种不同的成员,a的大小等于最大成员f的大小。
4.共用体和结构体可以相互嵌套。
共用体和结构体可以相互嵌套,用法两者是相同的。
例如:
#include<iostream> #include<math.h> using namespace std; int main(void) { union data { int i; char ch; double f; struct st { int st_i; double st_f; }in; }a; a.in.st_i = 1; cout << "a.in.st_i = " << a.in.st_i <<endl; a.in.st_f = 1.2; cout << "a.in.st_f = " << a.in.st_f <<endl; system("pause"); }
结果如下:
a.in.st_i = 1 a.in.st_f = 1.2 请按任意键继续. . .
这里有一个匿名用法,将上述例子改为匿名结构体形式:
#include<iostream> #include<math.h> using namespace std; int main(void) { union data { int i; char ch; double f; struct //没有名称 { int st_i; double st_f; }; }a; a.st_i = 1; cout << "a.in.st_i = " << a.st_i <<endl; a.st_f = 1.2; cout << "a.in.st_f = " << a.st_f <<endl; system("pause"); }
结果和刚才相同。这里共用体中嵌套的结构体没有名称(注意名称在struct之后定义),这样结构体的成员就直接成为了共用体的成员。
相关文章推荐
- C++学习笔记之struct和union(结构和共用体)
- C++学习笔记(七)--联合/共用体(union)用法
- C++学习笔记联合/共用体(union)用法
- 【C++基础学习】C++中union结构
- C++ 联合/共用体(union)
- c++高级---C_C++的union的学习笔记总结
- C++之union联合/共用体声明、定义和使用详解
- C_C++的union的学习笔记总结
- C++学习笔记之六 复合类型之共用体
- C/C++学习笔记24:结构体与共用体
- C++学习总结(五)——结构体(struct),联合体(union)
- 【C/C++】C语言union(联合体 共用体)
- C++ 共用体:union
- C_C++的union的学习笔记总结
- C++ 学习笔记(19)new/delete表达式、定位new、typeid、dynamic_cast、type_info、枚举类型、成员函数指针、union、位域、volatile限定符、链接指示
- C++学习笔记2,各基础类型及共用体的长度测试
- 【C/C++】C语言中一些容易被人忽略的东西 之三 【共用体、联合、union】
- C++学习之旅-{共用体一游}
- [C++] Union共用体示例讲解
- C++学习笔记二十四-Union