您的位置:首页 > 编程语言 > C语言/C++

C++学习8:共用体union

2017-08-12 18:02 218 查看
今天来学习一下共用体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
请按任意键继续. . .


这里首先给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之后定义),这样结构体的成员就直接成为了共用体的成员。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: