(五十三)共用体

简介:

由于教程上的看的还是不太懂,以下是自己总结的

共用体(union)又称联合体,特点是

①一个共用体之下有多个变量,

②且同时只能存在一个,

③且后面进行赋值的会覆盖前面的,

且只能使用int、char、double三种变量,可以使用多种变量,任何 int(包括 char),任何浮点类型,(float,double,long double),以及指针union,struct,以及 以上类型的 数组 作为他的成员。但必须让用户自己写一个constructor否则无法正常生成这个union的对象。

⑤且共用同一块内存(这也是后面会覆盖前面的原因),

⑥形式类似结构

 

标准格式为:

	union 共用体名
	{
		int	变量名1;
		char 变良名2;
		double 变量名3;
	};
	共用体名 使用该共用体的共用体变量名;
<span style="white-space:pre">	</span>共用体变量名.共用体内其中一个类型的变量名 = 值;	//给共用体赋值

上代码:


#include<iostream>
using namespace std;

int main()
{
	union abc	//定义共用体abc
	{
		int	a;
		char b;
		double c;
	};
	abc apple;	//声明apple共用体
	apple.b = 'a';	//初始化apple共用体char b的值为字符串a
	cout << apple.b << endl;
	apple.a = 10;	//覆盖apple共用体的内存,用int a的值取代char b值
	cout << apple.a << endl;
	system("pause");
	return 0;
}

注意:(根据实践总结,欢迎指正)

①根据实际测试,char类型不能用字符串(即像char b[10];这样在编译的时候会出问题);

②只能用int、char、double,其他类型不可以;

③定义和声明的形式,类似结构;

④共用体只能储存一个字符,如果储存多个字符,会出问题,例如之后的输入被跳过(因为存储空间溢出);

⑤共用体虽然可以变换为三种形式,但一次只能显示其中一种,如果想输入另外一种,那么前一种就会被覆盖(即再也调用不出来,就算调用,也调用的是错误的);

⑥共用体可以用在结构之中,如代码:

#include<iostream>
#include<string>
using namespace std;

struct abc	//定义结构abc
{
	string a;	//结构的第一个成员为string a
	union	//结构的第二个成员为共用体,具体哪个需要看声明和初始化
	{
		int b;	//共用体的第一个成员为int格式
		double c;	//共用体的第二个成员为double格式
	};
};

int main()
{
	abc gtt = { "数值" };	//声明gtt结构,	采用abc结构的形式,并初始化第一个成员的值为“数值”
	gtt.b = 1;	//初始化gtt结构的第二个成员,并且第二个成员采用共用体的第一个成员int类型
	cout << gtt.a << endl;	//输出结构的第一个成员
	cout << gtt.b << endl;	//输出结构的第二个成员(且格式为共用体第一个成员的类型)
	gtt.c = 1.11;	//覆盖gtt结构的第二个成员的值,并且采用的格式为共用体第二个成员的double类型
	cout << gtt.c << endl;	//输出结构第二个成员的值(且格式为共用体第二个成员的类型)
	system("pause");
	return	0;
}

输出结果为:


数值
1
1.11

我们可以从代码中看到,采用共用体时,共用体不同的成员(类型)需要使用不同的变量名,然后在初始化时,使用 结构名.共用体成员变量名 这种形式进行初始化,类似使用结构时的 结构名.结构成员变量名 这种形式。

(注:这次在union 后面直接是大括号,没有名字,使用的是匿名共用体的形式,和共用比相比,在引用的时候,可以不用写共用体的名,且匿名共用体的两个成员,认为是结构的两个成员——虽然同时只能存在一个)

 


目录
相关文章
|
C++ 编译器 程序员
|
C语言
【C语言程序设计】知识点汇总5——结构体与共用体
【C语言程序设计】知识点汇总5——结构体与共用体
131 0
|
存储 C语言 C++
C语言编程-共用体
共用体是一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型。您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值。共用体提供了一种使用相同的内存位置的有效方式。
指针数组与数组指针---傻傻分不清楚?
整形数组是存放整形的数组 字符数组是存放字符的数组 所以,指针数组是存放指针(地址)的数组 整形数组的书写形式是int arr[10],字符指针书写形式是char arr[10],所以字符指针的书写形式是int *arr[10] char* arr[10] 接下来创建一个字符指针数组
76 0
|
9月前
7-9 sdut-C语言实验-共用体练习
7-9 sdut-C语言实验-共用体练习
46 0
|
9月前
sdut结构体与共用体6
sdut结构体与共用体6
41 0
|
9月前
|
机器学习/深度学习
sdut结构体与共用体4
sdut结构体与共用体4
49 0
|
9月前
sdut结构体与共用体1
sdut结构体与共用体1
54 0
|
9月前
sdut结构体与共用体5
sdut结构体与共用体5
43 0

热门文章

最新文章