共用体union详解
1. 什么是共用体
共用体,Union。顾名思义,就是多个变量共同使用同一个内存单元。它也是一种数据类型,与结构体相类似,里面包含多个成员变量,但又有很大的不同。共用体里面可以声明多个不同类型的变量,但是其内存单元只有一个,而且是变量所占内存最大的那一个。例如一个共用体里面包含一个整形变量a,一个浮点型变量b,一个实型变量c,a要1个字节,b要2个字节,c要4个字节。那么共用体的内存长度就是最长成员的长度4.
2. 共用体特点
(1) 同一个内存段可以存放几种不同的变量
(2) 共用体变量中起作用的成员是最后一次存放的变量
(3) 共用体变量的地址和成员地址都是一样的
(4) 与结构体一样不能直接对变量名赋值,只能对成员赋值
(5) 共用体不能作为参数,但可以使用指向共用体变量的指针
(6) 共用体可以出现在结构体类型定义中,也可一定义共用体数组
3. 如何使用共用体
(a).定义与声明
定义:
Union data
{
Int I;
Float t;
Char ch;
};
声明:
Union data a,b,c;
(b)引用数据或打印
当我们队union进行赋值时,union只包含一个数据,那就是你最后赋值的那个数据
例如:
a. i=1;
a. =2.1;
a. ch=’a’;
那么实际上,共用体a中只存储了a.ch=’a’.
输出:
Printf(“%c”,a.ch);
4. 共用体的作用
通过共用体union的概念可知,共用体最大的作用就是当我们对一个数据进行赋值时,可以根据不同的需求来实现不同的数据要求。例如当我们对老师和学生的数据进行存储时,都含有编号,姓名,工作,班级/职位。
这是如果工作是student,那么只需要存储班级
而如果是teacher,那么就只需要存储职位
5. 在项目中的应用:
共用体在项目中最大的作用是显示数据根据不同条件的存储(待续)
6. 应用实例代码:
7. // Union_study.cpp : Defines the entry point for the console application.
8. //
9.
10. #include "stdafx.h"
11. #include<iostream>
12. using namespace std;
13. struct Person
14. {
15. int num;
16. char name[10];
17. char sex;
18. char job;
19. union
20. {
21. int banji;
22. char position[10];
23. }category;
24. };
25.
26.
27. int _tmain(int argc, _TCHAR* argv[])
28. {
29. printf("请输入学生或教师信息:\n");
30. struct Person person[2];
31. for(int i=0;i<2;i++)
32. {
33. scanf("%d %s %c %c",&person[i].num,&person[i].name,&person[i].sex,&person[i].job);
34. if(person[i].job=='s')
35. {
36. scanf("%d",&person[i].category.banji);
37. }
38. else if(person[i].job=='t')
39. {
40. scanf("%s",&person[i].category.position);
41. }
42. else
43. {
44. printf("输入错误!\n");
45. }
46. }
47. printf("学生信息如下:\n");
48. printf("NO. Name sex job class/position\n");
49. for(int i=0;i<2;i++)
50. {
51. if(person[i].job=='s')
52. printf("%d %6s %6c %6d %6d\n",person[i].num,person[i].name,person[i].sex,person[i].job,person[i].category.banji);
53. else
54. printf("%d,%6s,%6c,%6d,%6s\n",person[i].num,person[i].name,person[i].sex,person[i].job,person[i].category.position);
55. }
56. printf("学生信息如下:\n");
57. system("pause");
58. return 0;
59. }
60.