问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

新人求教啊,求教c++公用体的运用

发布网友 发布时间:2022-03-27 14:02

我来回答

1个回答

热心网友 时间:2022-03-27 15:32

定义:
使用覆盖技术,几个变量相互覆盖,从而使几个不同变量共占同一段内存的结构,成为共同体类型的结构。
共同体的定义类似结构体,不过共同体的所有成员都在同一段内存中存放,起始地址一样,并且同一时刻只能使用其中的一个成员变量。
声明共用体的一般形式为:

复制代码代码如下:

union 共用体类型名
{
成员列表
};

定义共用体变量的一般形式为:

共用体类型名 共用体变量名;
例如:

复制代码代码如下:

union data{
int i;
char ch;
double d;
};
data a,b,c;

或者

复制代码代码如下:

union{
int i;
char ch;
double d;
};
data a,b,c;

结构体变量所占长度是各成员占的内存长度之和。每个成员分别占有自己的内存单元。共用体变量所占的内存长度等于最长的成员的长度。

共用体的使用
1.不能应用共用体变量,而只能引用共用体变量中的成员。
例如:

复制代码代码如下:

cout<<a.i;
cout<<a.ch;

2.使用共用体变量的目的是希望通过统一内存段存放几种不同类型的数据。

但是要注意,每一瞬间只能存放一种,而不是存放集中。并且,如果对新的成员变量的话,原来的成员变量的值就被覆盖了。

复制代码代码如下:

#include<iostream>
using namespace std;
int main(){
union data{
char a;
char b;
};
data qianshou;
qianshou.a='q';
cout<<qianshou.a<<endl;
qianshou.b='m';
cout<<qianshou.a<<endl;
return 0;
}

后来,我们对共用体中的成员b进行了赋值,结果我们输出的是成员a,输出的是b的值,所以证明它们是公用地址的。

3.不能对共用体变量名赋值,不能企图引用变量名来得到一个值;不能在定义共用体变量时对它初始化,不能用共用体变量名作为函数参数。
一个共同体的实例:
设有若干个人员的数据,其中有学生和老师。学生的数据包括:姓名,编号,性别,职业,年级。老师的数据包括:姓名,编号,性别,职业,职务。可以看出,学生和老师所包含的数据是不同的。先要求把他们放在同一个表格中:

要求设计程序输入人员信息然后输出。
如果把每个人都看作一个结构体变量的话,可以看出老师和学生的前4个成员变量是一样的,并且第五个成员变量可能是class或者position,当第四个成员变量是s的时候,第五个成员变量就是class;当第四个成员变量是t的时候,第五个成员变量就是position。

复制代码代码如下:

#include<iostream>
#include<string>
using namespace std;
int main(){
struct{
string name;
string num;
char sex;
char job;
union{
char grade[5];
char position[5];
}p;//定义了一个共同体变量
}person[2];//定义了一个结构体数组变量
int i=0;
cout<<"name\tnum\tsex\tjob\tclass/position"<<endl;
for(;i<2;i++){
cin>>person[i].name>>person[i].num>>person[i].sex>>person[i].job;
if(person[i].job=='s')cin>>person[i].p.grade;
else cin>>person[i].p.position;
}
i=0;
cout<<"===========show data==========="<<endl;
for(;i<2;i++){
cout<<person[i].name<<"\t";
cout<<person[i].num<<"\t";
cout<<person[i].sex<<"\t";
cout<<person[i].job<<"\t";
if(person[i].job=='s')cout<<person[i].p.grade<<endl;
else cout<<person[i].p.position<<endl;
}
cout<<endl;
return 0;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
手机壁纸花卉红色手机壁纸花卉 辽宁智能五芯防水连接器 军工产品浅谈——航空插头 xp电脑系统修复XP系统怎么恢复出厂设置 ...表编辑器后打不开任何文件,无需重装系统,电脑盲都能用 粼基本信息 粼五笔怎样打? 【微科普】想变成光?先搞清楚光是什么吧! 手机被拉黑后打电话是什么提示? 物流管理专业对数学的要求高么 C语言中联合体是什么样的?与结构体不一样吧?还有运算符的目数怎么计算? C里的共同体和结构体的区别 c语言中有个东东叫 “mei” “ju”的,面试时有人问的,能解释一下么? C语言结构体的问题? 共用体和结构体的区别 C语言 我是初学者 4道C语言判断题求助 C语言题这个是什么意思请高手说明一下 请教各位C语言高手 共用体变量所占内存长度等于? C语言中共用体变量所占内存长度等于? iphone怎么给app设置密码 苹果12如何给应用加密 iphone怎么给软件加密 苹果手机的NFC功能在哪找? 苹果手机nfc在哪里 苹果手机如何找到nfc功能 苹果手机nfc功能在手机哪里 苹果手机在什么地方找nfc 抖音里面的万物大头视频是怎样拍的为什么会说图片不适合_问一问 共用体类型的变量在内存中的大小 C语言共用体 C语言的判断题,求解!~ C语言 共用体 解释下 若已定义了如下的共用体类型变量x,则x所占用的内存字节数为() 已知定义了如下共用体变量:union date {int i; char ch; float f;}b; 则变量b所占的内存长度为 9位 C语言中,该共用体的大小为何是12? VivoX9手机里面的照片删除了怎么恢复? vivox9手机刚刚拍的照片不小心删除了,如何才能恢复? vivox9手机照片误删怎么恢复 怎么关闭iphone辅助小圆点 苹果手机中屏幕上的小圆圈怎么关闭 怎么关闭苹果的小圆点 苹果手机屏幕上小圆圈怎么设置去掉 苹果手机怎么关闭小白点 怎么关闭苹果手机小圆点 如何关闭苹果8的小圆点 苹果11怎么取消小圆点 苹果IPAD2什么时候上市的 ipad2大陆上市时间