定义:

使用覆盖技术,几个变量相互覆盖,从而使几个不同变量共占同一段内存的结构,成为共同体类型的结构。

共同体的定义类似结构体,不过共同体的所有成员都在同一段内存中存放,起始地址一样,并且同一时刻只能使用其中的一个成员变量。

声明共用体的一般形式为:

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;
}

共用体的定义和应用【C++】的更多相关文章

  1. 瘋子C语言笔记(结构体/共用体/枚举篇)

    (一)结构体类型 1.简介: 例: struct date { int month; int day; int year; }; struct student { int num; char name ...

  2. 【C语言入门教程】7.4 共用体

    7.4 共用体 共用体又称为联合体,是由不同的数据类型组成的一个整体.与结构体不同的是,共用体每次只能使用其中一个成员.结构体的总长度是结构体所有成员长度之和,共用体的总长度是其中最长一个数据类型的长 ...

  3. C语言高级-结构,共用体,文件,链表

    C语言结构 标准声明方式 struct student{        int age;        char sex;    }; 这个可以在main函数中定义:  struct student ...

  4. c的详细学习(10)结构体与共用体的学习(二)

    在c语言中,结构体数据类型与共用体数据类型都属于构造类型.共用体与结构体数据类型在定义上十分相似,但它们在存储空间的占用分配上有本质的区别.结构体变量是各种类型数据的集合,各成员占据不同的存储空间,而 ...

  5. C 共用体

    C 共用体 共用体是一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型.您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值.共用体提供了一种使用相同的内存位置的有效方式. 定 ...

  6. 07.C语言:结构体、共用体、枚举

    一.结构体 是一种复合的数据类型,由多个不同类型的数据(为结构体的成员)组成的集合. 在c语言中没有给出结构体这种类型具体的形式(名称),但是给出类定义该结构体类型的方法(格式). 在使用结构体类型时 ...

  7. C/C++(共用体与枚举)

    共用(Union)与枚举(Enum) 共同体 c语言中,不同的成员使用共同的存储区域的数据结构类型称为共用体.(共用,联合体),共用体在定义,说明,适用形式上与结构体相似.两者本质上的不同在于使用内存 ...

  8. ndk学习之C语言基础复习----结构体、共用体与C++开端

    自己实现sprintf功能: 关于C中的系统函数sprintf在上次[https://www.cnblogs.com/webor2006/p/7545627.html]学习中已经用到过了,这里再来回顾 ...

  9. C语言笔记 09_共用体&typedef&输入|输出

    共用体 共用体允许您在相同的内存位置存储不同的数据类型.您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值.共用体提供了一种使用相同的内存位置的有效方式. 定义共用体 为了定义共用体, ...

随机推荐

  1. Android FrameLayout单帧布局

    FrameLayout:所有控件位于左上角,并且直接覆盖前面的子元素. 在最上方显示的层加上: android:clickable="true" 可以避免点击上层触发底层. 实例: ...

  2. 《机器学习实战》学习笔记第五章 —— Logistic回归

    一.有关笔记: 1..吴恩达机器学习笔记(二) —— Logistic回归 2.吴恩达机器学习笔记(十一) —— Large Scale Machine Learning 二.Python源码(不带正 ...

  3. 算法(Algorithms)第4版 练习 1.5.3

    id数组和treesize数组变化情况: 0 1 2 3 4 5 6 7 8 9 1 1 1 1 1 1 1 1 1 1 10 components 9 0 1 2 3 4 5 6 7 8 9 1 1 ...

  4. 普通java类加入spring容器的四种方式

    今天在自己开发的工具类中使用了spring注入的方式调用了其他类,但是发生的报错,在整理了后今天小结一下. 首先简单介绍下spring容器,spring容器是整个spring框架的核心,通常我们说的s ...

  5. Mac 上Sublime Text 2配置lua环境

    1,首先下载最新版lua  然后解压到你想解压到的位置     http://www.lua.org/ftp/ 2,运行终端,cd  进入该文件夹src目录下. 3,在终端输入 make macosx ...

  6. SSAS——基础

    一.Analysis Services Analysis Services是用于决策支持和BI解决方案的数据引擎.它提供报表和客户端中使用的分析数据. 它可在多用途数据模型中创建高性能查询结构,业务逻 ...

  7. zoj1360/poj1328 Radar Installation(贪心)

    对每个岛屿,能覆盖它的雷达位于线段[x-sqrt(d*d-y*y),x+sqrt(d*d+y*y)],那么把每个岛屿对应的线段求出来后,其实就转化成了经典的贪心法案例:区间选点问题.数轴上有n个闭区间 ...

  8. Android之Widget学习总结

    1.Widget设计步骤 需要修改三个XML,一个class: 1)第一个xml是布局XML文件(如:main.xml),是这个widget的.一般来说如果用这个部件显示时间,那就只在这个布局XML中 ...

  9. 如何用Mendeley引用目标期刊要求的参考文献格式

    如果我们要向目标的杂志期刊投稿,则需要采用该期刊的参考文献格式.我用的mendeley管理文献,不收费且使用方便.那么,我们如何用mendeley引用目标期刊的参考文献呢?以Applied energ ...

  10. 【leetcode刷题笔记】Binary Tree Level Order Traversal II

    Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left ...