C++学习8:共用体union【黑马C++培训】
更新时间:2023年01月03日 14时21分11秒 来源:黑马程序员论坛
今天来学习一下共用体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");
}
推荐了解热门学科
传智播客是一家致力于培养高素质软件开发人才的科技公司,“黑马程序员”是传智播客旗下高端IT教育品牌。自“黑马程序员”成立以来,教学研发团队一直致力于打造精品课程资源,不断在产、学、研3个层面创新自己的执教理念与教学方针,并集中“黑马程序员”的优势力量,针对性地出版了计算机系列教材50多册,制作教学视频数+套,发表各类技术文章数百篇。
传智播客从未停止思考
传智播客副总裁毕向东在2019IT培训行业变革大会提到,“传智播客意识到企业的用人需求已经从初级程序员升级到中高级程序员,具备多领域、多行业项目经验的人才成为企业用人的首选。”
中级程序员和初级程序员的差别在哪里?
项目经验。毕向东表示,“中级程序员和初级程序员最大的差别在于中级程序员比初级程序员多了三四年的工作经验,从而多出了更多的项目经验。“为此,传智播客研究院引进曾在知名IT企业如阿里、IBM就职的高级技术专家,集中研发面向中高级程序员的课程,用以满足企业用人需求,尽快补全IT行业所需的人才缺口。
何为中高级程序员课程?
传智播客进行了定义。中高级程序员课程,是在当前主流的初级程序员课程的基础上,增加多领域多行业的含金量项目,从技术的广度和深度上进行拓展。“我们希望用5年的时间,打造上百个高含金量的项目,覆盖主流的32个行业。”传智播客课程研发总监于洋表示。
黑马程序员热门视频教程