共用体类型

1.含义:用同一段内存存放不同类型的变量,也就是使用覆盖技术,后一个数据覆盖前面的数据,使几个不同的变量共享同一段内存的结构成为共用体。往往在数据处理中,有时需要对同一段内存空间安排不同的用途,这时用共用体类型比较方便。

2.形式

  union  Data

{

  int i;

 char ch;

 float f; 
}a,b,c;

3.引用共用体变量的方式

如a.f;

4.共用体类型的数据特点

 (1).共用体与结构体非常相似,结构体变量所占内存长度等于各个成员占内存长度的和,每个成员分别占有自己的内存,而共用体变量所占内存长度等关于最长的成员的长度。

 (2).同一段内存可以存放几种不同类型的成员,但每一瞬间只能存放其中一个成员。

 (3).可以对共用体变量初始化,但初始化表中只能有一个常量,union Data a = {16}。

 (4).共用体变量中起作用的是最后一次被赋值的成员变量。

 (5)共用体变量的地址和它的各个成员的地址都是同一地址。

 (6)不能对共用体变量名赋值,也不能企图引用变量名来得到一个值,如a = 1 不对。

 (7)可以使用共用体变量的指针做函数参数。

 (8)共用体类型可以出现在结构体类型定义中,也可以定义共用体数组,繁反之也可以。

举一个简单的例子如下:

 1 #include<stdio.h>
 2 struct
 3 {
 4     int num;
 5     char name[10];
 6     char sex;
 7     char job;
 8     union
 9     {
10         int clas;//成员班级
11         char posion[10];//成员职务
12     }category;    //成员共用体变量
13 }person[2];    //定义结构体数组,有两个元素
14 int main()
15 {
16     int i;
17     for (int i = 0; i < 2; i++)
18     {
19         printf("输入两个成员的数据信息:");
20         scanf_s("%d %s %c %c",&person[i].num,&person[i].name,&person[i].sex,&person[i].job);
21         if (person[i].job == 's')
22             scanf_s("%d",&person[i].category.posion);
23         else if (person[i].job == 't')
24             scanf_s("%s", &person[i].category.posion);
25         else
26             printf("输入有误");
27     }    
28     printf("\n");
29     printf("详细信息如下:");
30     for (int i = 0; i < 2; i++)
31     {
32         if (person[i].job == 's')
33             printf("%-6d,%-6s%,%-6c,%-6d\n", person[i].num, person[i].name, person[i].sex, person[i].job, person[i].category.clas);
34         else
35             printf("%-6d,%-6s%,%-6c,%-6d\n", person[i].num, person[i].name, person[i].sex, person[i].job, person[i].category.posion);
36     }
37     return 0;
38 }
View Code

 

转载于:https://www.cnblogs.com/xyzyj/p/6538945.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值