共用体在一般的编程中应用较少,在单片机中应用较多。对于 PC 机,经常使用到的一个实例是: 现有一张关于学生信息和教师信息的表格。学生信息包括姓名、编号、性别、职业、分数,教师的信息包括姓名、编号、性别、职业、教学科目。请看下面的表格:

Name Num Sex Profession Score / Course
HanXiaoXiao 501 f s 89.5
YanWeiMin 1011 m t math
LiuZhenTao 109 f t English
ZhaoFeiYan 982 m s 95.0

f 和 m 分别表示女性和男性,s 表示学生,t 表示教师。可以看出,学生和教师所包含的数据是不同的。现在要求把这些信息放在同一个表格中,并设计程序输入人员信息然后输出。

如果把每个人的信息都看作一个结构体变量的话,那么教师和学生的前 4 个成员变量是一样的,第 5 个成员变量可能是 score 或者 course。当第 4 个成员变量的值是 s 的时候,第 5 个成员变量就是 score;当第 4 个成员变量的值是 t 的时候,第 5 个成员变量就是 course。

经过上面的分析,我们可以设计一个包含共用体的结构体,请看下面的代码:

#include <stdio.h>
#include <stdlib.h>#define TOTAL 4  //人员总数struct{char name[20];int num;char sex;char profession;union{float score;char course[20];} sc;
} bodys[TOTAL];int main(){int i;//输入人员信息for(i=0; i<TOTAL; i++){printf("Input info: ");scanf("%s %d %c %c", bodys[i].name, &(bodys[i].num), &(bodys[i].sex), &(bodys[i].profession));if(bodys[i].profession == 's'){  //如果是学生scanf("%f", &bodys[i].sc.score);}else{  //如果是老师scanf("%s", bodys[i].sc.course);}fflush(stdin);}//输出人员信息printf("\nName\t\tNum\tSex\tProfession\tScore / Course\n");for(i=0; i<TOTAL; i++){if(bodys[i].profession == 's'){  //如果是学生printf("%s\t%d\t%c\t%c\t\t%f\n", bodys[i].name, bodys[i].num, bodys[i].sex, bodys[i].profession, bodys[i].sc.score);}else{  //如果是老师printf("%s\t%d\t%c\t%c\t\t%s\n", bodys[i].name, bodys[i].num, bodys[i].sex, bodys[i].profession, bodys[i].sc.course);}}return 0;
}

转载于:https://www.cnblogs.com/biggerjun2015/p/11046391.html

Union的一个妙法相关推荐

  1. Python type hints 之 Optional,Union

    1,前言 type hint 在pep484加入,我个人觉得这种类似于类型约束的(机制)有点违背了python简单.简洁的初衷,在慢慢向c# java 这种强类型语言看齐的节奏. 不过好在不强制使用, ...

  2. 结构体struct 联合体 union

    今天我们来复习c语言提供的两种聚合数据类型(aggregate data type):数组和结构,其中之一"结构". 今天的第一个复习问题来了,什么是聚合数据类型? 聚合数据类型, ...

  3. C语言数据类型:联合(union)

    1. 联合说明和联合变量定义     联合也是一种新的数据类型, 它是一种特殊形式的变量.     联合说明和联合变量定义与结构十分相似.其形式为:      union 联合名{           ...

  4. C++中的union(联合体,共用体,数据变量可以共享内存,以节省内存空间)

    union介绍 C++的union本质上也是个类,跟struct性质几乎一致但是有一个最大的区别,数据共享内存. 说到共享内存就要说下union的内存分配:union的大小是按照union里面的成员内 ...

  5. 关于UNION ALL与 UNION 用法和区别

    (转自:http://www.cnblogs.com/EricaMIN1987_IT/archive/2011/01/20/1940188.html) UNION指令的目的是将两个SQL语句的结果合并 ...

  6. C++ Primer 5th笔记(chap 19 特殊工具与技术)union

    1. 定义 联合( union) 是一种特殊的类. 一个 union 可以有多个数据成员, 但是在任意时刻的某个成员赋值之后, 该 union 的其他成员就变成未定义的状态了. 对象的存储空间至少要能 ...

  7. sqlserver exec查询存储过程取某一个字段_ORC文件存储格式的深入探究

    因为生病,另外还在做牙齿的根管治疗,痛不欲生,短更一篇. 年前都在梳理<大数据成神之路>的目录还有内容,另外Flink的公开课程也在规划大纲和目录.不知道我在说什么,看一下这里<20 ...

  8. C/C++语言中联合体union的妙用

    联合体union的基本概念 在C/C++语言中,有时需要在同一段内存单元中存放不同类型的变量,如把一个整形变量int.一个字符型变量char和一个双精度实型变量double放在同一个地址开始的内存单元 ...

  9. c++ -- union介绍

    union介绍 共用体,也叫联合体,在一个"联合"内可以定义多种不同的数据类型, 一个被说明为该"联合"类型的变量中,允许装入该"联合"所定 ...

最新文章

  1. MindSpore技术理解(下)
  2. linux查看python版本命令-linux 查看版本命令
  3. vonic 安装的坑
  4. 一维正态分布、二维正态分布的matlab实现
  5. Hadoop大数据——mapreduce的secondary排序机制
  6. dqn系列梳理_DQN是学习归纳出了策略,还是仅仅是memorize了大量的episodes?
  7. Oracle 19c 新特性:混合分区表Hybrid partitioned tables强体验
  8. python第五章课后题答案_python程序设计基础(嵩天)第五章课后习题部分答案
  9. Data Structure_数组_栈_队列_链表_霍夫曼
  10. Tomcat启动报错 java lang IllegalArgumentException Can't convert
  11. MySQL学习笔记(七)视图,触发器,事务,存储过程,函数,流程控制,索引
  12. 学嵌入式需要报培训班吗?
  13. java毕业设计企业员工考勤系统的设计与实现源码+lw文档+mybatis+系统+mysql数据库+调试
  14. #牛客网 吐泡泡 (栈)
  15. 1NF | 2NF | 3NF的区分以及什么是函数依赖、部分函数依赖、值传递依赖(最详细的讲解1NF、2NF、3NF的关系)
  16. 非激活窗口(Inactive Window)
  17. Android官方开发文档Training系列课程中文版:打印内容之自定义文档打印
  18. 【Mac终端】 root与普通用户切换(root/bash-3.2/sh-3.2/MacBook-Pro区别)
  19. 游戏建模软件哪个好学
  20. 传感器php,传感器的组成是什么?

热门文章

  1. 变位齿轮重合度计算公式_渐开线圆柱齿轮传动的重合度计算.pdf
  2. rpm常用命令集合2
  3. 智能一代云平台(九):EclipseLink返回Object转为实体的分析
  4. 搜狗开源最新NLP研究成果,打造业内最全机器阅读理解工具包SMRC
  5. 打破AI算力瓶颈,华为升级“智能计算”重塑IT行业
  6. 谁是“顶会狂魔”?周明、张潼等上榜,清华第四,北大第六 | 2018 ML和NLP顶会论文统计出炉...
  7. 从高的角度看自动化测试
  8. 两种简单高效的“反人脸识别”方法
  9. OpenStack Trove2
  10. linux -- ubuntu桌面版安装xampp