联合类型及其应用
来源:互联网 发布:linux 网络连接日志 编辑:程序博客网 时间:2024/04/26 04:16
一、联合引入 有时在编程中,可能需要定义多个结构体类型,可能每个类型大体相同,只有微小差异,例如个人信息,包含职业,年龄,家庭地址,假设职业不同,就定义不同的结构体,这些结构体中大部分数据信息相同,如果人数较多,信息元素也复杂,此种情况下定义结构体相对来说就会加大工作量。 例如构造3个结构,这3结构定义的变量分别用于指代不同数据信息,但3个结构有3个相同类型的成员变量,有一个不同的成员变量;只因为有一个成员变量不同要花出“构造三个不同结构类型”的代价,有些不值得。 二 联合: 1.定义联合类型的变量(2种方式): (2)构造好联合以后,使用union和联合类型名定义结构变量
union try_union{ int i; double d; char c;};union try_union un1;
(2)构造联合类型的同时定义联合变量
union try_union{ int i; double d; char c;}un2;
2.联合类型变量的赋值(初始化) (1)联合类型的所有变量都指代相同存储空间的数据,所以只对其中一个初始化即可,C语言规定:要初始化联合类型的变量,只能选择初始化第一个成员变量。
union try_union{ int i; double d; char c;}un1 = { 10 };//或 union try_union un1={10};//(2)使用赋值运算符un1.d=1.234
3.注意:联合类型的成员变量都指代同一存储空间中的数据,所以后赋的值会覆盖前面的值。联合类型变量的特殊性: (1)所有成员指代同一数据(2)为正确读到数据,应使用最后赋值的变量读取数据。代码如下:
union un//联合体 存放它们不同的成员变量{ short grade; char title; char work_years;};struct person_info//结构体,基本信息{ char name; char sex; short age; char profession; union un un1;};//规定profession指代字符s时引用联合成员un1.grade,t时引用联合成员un1.title,c时引用联合成员 un1.work-yearsvoid print_info(int n, struct person_info *p)//打印信息函数{ puts("name\t sex\t age\t job\t grade/title/work_ages"); for (int i = 0; i < n; i++) { printf("%2c\t%c\t%hd\t%c\t", p->name, p->sex, p->age, p->profession); if (p->profession == 's') { printf("%t\%hd\n", p->un1.grade); } if (p->profession == 't') { printf("%t\%c\n", p->un1.title); } if (p->profession == 'c') { printf("%t\%hd\n", p->un1.work_years); } p++; }}void TestUnion(){ puts("\t---Informations of all people--\n"); struct person_info per[] = { { 'J', 'm', 20, 's' }, { 'B', 'm', 21, 's' }, { 'M', 'w', 21, 's' }, { 'I', 'w', 20, 's' }, { 'Y', 'w', 29, 't' }, { 'C', 'w', 27, 't' }, { 'W', 'm', 39, 'c' }, }; per[0].un1.grade = 3; per[1].un1.grade = 2; per[2].un1.grade = 2; per[3].un1.grade = 3; per[4].un1.title = 'S'; per[5].un1.title = 'G'; per[6].un1.work_years = 4; print_info(7, per);//打印这7个人的信息 puts("\t-- * The infomations about the blank * --"); puts("Job: \t 's'--- student \n\t't'--- tescher \n\t'c'---cleaner"); puts("grade: \t 1~4"); puts("title: \t'S'---Superior\n\t 'G'---General"); puts("work_years:\t 1~10"); printf("\n");}int main(){ TestUnion(); system("pause"); return 0;}
运行结果如下图:
阅读全文
0 0
- 联合类型及其应用
- Web服务及其应用类型
- Spring中的Advice类型及其应用
- Spring中的Advice类型及其应用
- Spring中的Advice类型及其应用
- C++标准库类型 bitset及其应用
- 透明联合类型
- C++类型-联合
- 使用联合类型
- 联合类型的声明
- 联合和枚举类型
- C++ 联合,枚举,类型
- C++联合类型
- 类型名字的获取及其应用(g++ only)
- js数据转换boolean类型和短路逻辑-及其应用;
- 类型别名 联合类型 枚举类型
- VB+VFP联合应用
- 联合的有趣应用
- 页面生成动态百度地图(百度api)
- 建造者设计模式
- JDBC[思维导图]
- python若干问题
- 新唐Nuvoton NUC972 看门狗WatchDog(WDT)使用注意事项
- 联合类型及其应用
- Jfinal配置不得不注意的问题
- Shell case esac语句
- Mac版R语言(五)使用正则表达式(Regular Expressions)提取数据信息
- GitHub进阶笔记1--Github常用命令
- Maven使用心得
- 实现AJAX跨域的三种方法
- CMD命令---切换目录
- 第十二周作业