Union共用体总结

                                   共用体union详解

1.       什么是共用体

共用体,Union。顾名思义,就是多个变量共同使用同一个内存单元。它也是一种数据类型,与结构体相类似,里面包含多个成员变量,但又有很大的不同。共用体里面可以声明多个不同类型的变量,但是其内存单元只有一个,而且是变量所占内存最大的那一个。例如一个共用体里面包含一个整形变量a,一个浮点型变量b,一个实型变量ca1个字节,b2个字节,c4个字节。那么共用体的内存长度就是最长成员的长度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.   

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值