C++关于Union使用的部分总结

说明:未加说明,struct均指C++语言中的struct(可以有成员函数,可以定义访问属性)

1 什么是Union?

(1)与class,struct相似用于定义数据结构;union 可以说是一种特殊的类,有自己的成员变量也可以有自己的成员函数,默认访问属性为public;

(2)共享同一内存;同一Union中的各个变量共享同一内存,也就是说,所有变量互斥存在。

(3)基于(2),Union那么有人可能问,一个Union结构占用的内存大小如何确定?不多说上代码:

 1 // TemplateExe1.cpp : 定义控制台应用程序的入口点。
 2 //
 3 
 4 #include "stdafx.h"
 5 #include <iostream>
 6 using namespace std;
 7 union uEx {
 8     int a;
 9     char b;
10     double c;
11 
12 };
13 int main()
14 {
15     cout << sizeof(uEx) << endl;
16 
17     return 0;
18 }

执行上述代码,不管你是否对uEx进行了初始化,sizeof(uEx)的大小始终为8(sizeof(double),32位IDE)。

由此可得,联合(共用体变量)共用同一内存,内存大小固定为成员变量所占内存的最大值。

2 为何使用Union?

重要原因:节省内存。

代码:

 1 // TemplateExe1.cpp : 定义控制台应用程序的入口点。
 2 //
 3 
 4 #include "stdafx.h"
 5 #include <iostream>
 6 using namespace std;
 7 union uEx {
 8     int a;
 9     char b;
10     double c;
11 
12 };
13 class cEx
14 {
15     int a;
16     char b;
17     double c;
18 };
19 int main()
20 {
21     cout << sizeof(uEx) << endl;
22     cout << sizeof(cEx) << endl;
23     getchar();
24     return 0;
25 }

以上代码运行结果是:

8

16。

3 如何用?

(1)同结构体一样,定义-初始化-使用;使用时注意共享内存即可。上代码:

 1 #include "stdafx.h"
 2 #include <iostream>
 3 using namespace std;
 4 union Grade {
 5     int number;
 6     char mark;
 7     bool pass;
 8     
 9 }uGrade;
10 int main()
11 {
12     uGrade.number = 90;
13     printf("%d",uGrade.number);
14     getchar();
15     
16     return 0;
17 }

代码中定义了一个全局Union 类,三个变量表示分数的三种形式。

应用场景归纳如下:

1)一门课程需要一个Grade数据结构来表示成绩;

2)同时成绩有三种情况,并且一门课程的成绩只有一种表示(要么百分制,要么等级制,要么过与不过)。

这时即可使用Union;

除特殊说明外,其余所有文章均属原创。未经允许,请勿进行转载或者其他操作 有问题欢迎留言交流
原文地址:https://www.cnblogs.com/LiuBingBlogs/p/8545190.html