今天来学习一下共用体union。
共用体可以让不同类型的变量共用同一内存单元,用来节省内存,主要用于嵌入式系统编程、操作系统数据结构或硬件数据结构。
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
请按任意键继续. . .
1
2
3
这里首先给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");
}
|
|