打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C++中的共用体(union)结构解析与结构体(struct)共用体(union) 的区别
分类: C++开发博文 2012-04-10 09:58 969人阅读 评论(1) 收藏 举报

共用体(union)

一、 基础概念

有时需要使几种不同类型的变量存放在同一段内存单元中。虽然在同一段内存中不同数据类型所占字节数不同,但都从同一地址开始存放,也就是使用了覆盖技术,几个变量互相覆盖。这种使几个不同的变量共占一段内存的结构,称为共同体类型的结构(也称为联合类型)。

二、 声明共用体类型的一般形式:

union 共用体类型名

 {

     成员表列

};

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

共用体类型名 共用体变量名;

也可以在声明共用体类型的同时定义共用体变量,也可以没有共用体类型名直接定义共用体变量。

union data

{

int i;

char ch;

double d;

}a,b,c;

三、 “共用体”与“结构体”区别

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

四、 对共用体变量的访问方式

不能直接引用共用体变量,只能引用共用体变量中的成员。

a.i;       a.ch        a.f

不能引用共用体变量:cout<<a;

五、 共用体类型数据的特点

1、   使用共用体变量的目的是希望在同一个内存段存放几种不同类型的数据。注意:在每一瞬时只能存放其中一种,而不是同时存放多种。换句话说,每一瞬时只有一个成员起作用,其他成员不起作用。

2、   能够访问的是共用体变量中最后一次被赋值的成员,在对一个新的成员赋值后原有的成员就失去作用。因此在引用共用体变量时应注意当前在共用体变量中起作用的是哪个成员。

3、   共同体变量的地址和它的各成员的地址相同,为同一个地址。

4、   不能对共用体变量名赋值;不能引用变量名来得到一个值;不能在定义共用体变量时对它初始化;不能用共用体变量名作为函数参数。

六、共用体应用举例

设有若干个人员的数据,其中有学生和老师。学生的数据中包含:姓名、号码、性别、职业、年级。教师的数据包括:姓名、号码、性别、职业、职务。可以看出,学生和教师所包含的数据是不同的。要求输入人缘的数据,然后再输出。(一个学生一个教师)。

程序如下:

 

/*

 * test4.cpp

 *

 *  Created on: 2012-4-10

 *      Author:David

 */


#include<iostream>

#include<string>

#include<iomanip>  //因为在输出流中使用了控制符setw

usingnamespace std;

struct               //声明匿名的结构体

{

int num;

char name[10];

char sex;

char job;

union P             //声明共用体类型

{

int grade;      //年级

char position[10];//职务

}category;      //成员category为共用体变量

}person[2];        //定义共用体数组person,含两个元素(个人认为就是结构体类型变量)


int main()

{

int i ;

for(i=0;i<2;i++)

{

cin>>person[i].num>>person[i].name>>person[i].sex>>person[i].job;

if(person[i].job=="s")

{

cin>>perosn[i].category.position;

}elseif(person[i].job=="t")

{

cin>>person[i].category.position;

}

cout<<endl<<"No.Name sex job grade/position"<<endl;

}

for(i=0;i<2;i++)

{

if(person[i].job=="s")

{

cout<<person[i].num<<setw(6)<<person[i].name<<""<<perosn[i].sex<<""<<person[i].job<<setw(10)<<perosn[i].category.grade<<endl;

}else{

cout<<perosn[i].num<<setw(6)<<person[i].name<<""<<person[i].sex<<" "<<person[i].job<<setw(10)<<person[i].category.position<<endl;

}

}

return 0;

}

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C++中共用体的定义与应用总结
从零开始学习C语言构造数据类型共用体
小议大小端模式对C语言的共用体结构的影响
编程中国
共用体的定义和使用
4.5 共用体+枚举
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服