共用体(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
using namespace 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;
}else if(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;
}
分享到:
相关推荐
结构体(struct)与共用体(union)是C语言中就已经存在的数据类型,C++对他们进行了扩充,最大的变化是允许在结构和公用体中定义成员函数。下面将通过实例讲解二者的特性和用法。 1.struct 以下是一个使用了结构体...
在C语言中,结构体(Struct)和共用体(Union)是两种非常重要的复合数据类型,它们允许我们将多个不同类型的数据成员组合成一个单一的实体,以方便管理和使用。接下来,我们将深入探讨这两种数据类型的定义、特点...
结构体和共用体在C语言中是两种重要的复合数据类型,它们允许我们将多个不同数据类型的变量组合成一个单一的实体。以下是对这两种概念的详细解释: **结构体(Struct)** 1. **定义结构体**: 结构体通过`struct`...
共用体(union)也是一种复合数据类型,与结构体类似,但是共用体的多个成员共享同一段内存区域。这意味着所有成员都位于同一内存地址,但只能有一个成员的值是有效的。 **基本格式:** ```c union 共用体名 { ...
从给定的文件信息来看,主要讨论了C语言中的结构体(struct)与共用体(union)的概念、定义、初始化以及使用方式。下面将详细解释这些知识点。 ### 结构体(struct) #### 定义 结构体是C语言中一种复合数据类型,允许...
电子技术第十章结构体与共用体是编程语言中的一种重要概念,结构体是一种聚合数据类型,可以将多个变量组合成一个单一的变量,共用体则是一种特殊的结构体,具有相同的内存空间,但可以存储不同的数据类型。...
C语言结构体与共用体 C语言中结构体是一种构造数据类型,用途是把不同类型的数据组合成一个整体。结构体类型定义描述结构的组织形式,不分配内存。结构体类型定义的作用域是全局的或局部的,视定义的位置而定。 ...
在C语言中,结构体(struct)、共用体(union)和枚举类型(enum)是三种重要的复合数据类型,它们允许程序员组合不同类型的数据以适应复杂的数据结构需求。 1. **结构体(Struct)** 结构体是用于组合不同类型...
本节将深入探讨结构体和共用体这两种数据结构,它们是C语言中复合数据类型的重要组成部分。 结构体(structure)允许我们将不同类型的数据组合成一个单一的实体,便于管理和操作。在C语言中,我们可以通过以下方式...
结构体与共用体是 C 和 C++ 语言中非常重要的数据类型,它们允许我们将多个不同类型的数据组合成一个复合类型,方便管理和操作。本教程将详细讲解这两个概念,包括定义、使用和相关的高级特性。 11.1 定义一个结构...
此外,C语言中的共用体(union)是一种特殊的数据类型,它允许在一个内存位置存储不同的数据类型。与结构体不同,共用体所有成员共享同一块内存,这意味着任何时候只能存储一种类型的数据。枚举类型(enum)则允许...
在C语言中,结构体(struct)和共用体(union)是两种用户自定义的数据类型,它们允许程序员根据需求组合不同的数据类型。本章主要讨论了这两种数据类型的特性和应用。 首先,结构体用于将逻辑上相关的一组不同类型...
结构体(struct)和共用体(union)是C语言中两种重要的数据类型,它们允许开发者定义复杂的数据结构,以便更好地描述和处理复杂的数据。 结构体是一种自定义的数据类型,它由多个变量组成,每个变量可以是不同的...
C语言结构体和共用体知识点 结构体是一种构造数据类型,用途是把不同类型的数据组合成一个整体,自定义数据类型。结构体类型定义的格式为:struct ...共用体的使用与结构体类似,但共用体的成员共享同一块内存空间。
【C语言程序设计 - 结构体与共用体】 在C语言中,结构体(struct)...在实际编程中,结构体和共用体广泛应用于数据表示,如数据库记录、图形结构、配置文件解析等场景。理解和熟练使用它们是C语言编程的重要技能之一。
在高级语言程序设计中,结构体(Struct)和共用体(Union)是两种重要的复合数据类型,它们允许我们将不同类型的数据组合在一起,形成一个自定义的数据结构。在C语言和C++等编程语言中,这两种数据类型被广泛使用。 ...
在C语言中,结构体(struct)和共用体(union)是两种重要的构造类型,它们允许我们将不同类型的变量组合成一个复合数据类型。在工学领域,理解并熟练运用结构体和共用体对于编写复杂的程序至关重要。 1. 结构体 ...