Loading... ### 共用体: 使几个不同的变量共享同一段内存的结构,称为“共用体”类型的结构 ### 格式: union 共用体名 { 成员表列; } 变量表列; ### “结构体”与“共用体”的区别: 结构体变量所占内存长度=各成员占的内存长度之和 共用体变量所占内存长度=最长成员的长度 ### 共用体类型数据的特点: 同一个内存段可以用来存放几种不同类型的成员,但每一瞬间只能存放其中一个成员,而不是同时存放几个(通俗来说:就是共用体变量只能存放一个值) 在这里可能有人会想这还没有结构体好呢! 共用体只能存放一个东西。 对对对!正是这一个东西正是共用体的最大优点! <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-ccc5e4b42befaff9f31f15511ba5d1e876" aria-expanded="true"><div class="accordion-toggle"><span style="">上题</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-ccc5e4b42befaff9f31f15511ba5d1e876" class="collapse in collapse-content"><p></p> 有若干个人员数据,其中有老师,学生。 学生的数据中包括:姓名、号码、性别、职业、班级。 老师的数据中包括:姓名、号码、性别、职业、职务。 要求用一个表格输出: <p></p></div></div></div> ```cpp #include <stdio.h> #include <string.h> union job { char a[10];//职位 int cla;//班级 }; struct prople { char b[10];//名字 int num;//号码 char sex[10];//性别 char job[10]; union job cate; } ; int main () { struct prople pops[2], *p; int n; p = pops; for (n=0;n<2;n++) { scanf ("%s %d %s %s",&((p+n)->b), &((p+n)->num), &((p+n)->sex), &((p+n)->job)); if (strcmp((p+n)->job,"s") == 0 ) { scanf ("%d", &(pops[n].cate.cla)); } else if (strcmp((p+n)->job,"t") == 0) { scanf ("%s", &(pops[n].cate.a)); } } printf("\n\n"); for (n=0;n<2;n++) { printf("第%d:\n",n+1); printf ("%s %d %s %s",(p+n)->b, (p+n)->num, (p+n)->sex, (p+n)->job); if (strcmp((p+n)->job,"s") == 0) { printf (" %d\n", (p+n)->cate.cla); } else if (strcmp((p+n)->job,"t") == 0) { printf (" %s\n", (p+n)->cate.a); } } return 0; } ``` 其实这若干人员也许并不仅仅只有学生和老师还有其他若干职业,其他数据类型大致相同,唯有职业不同,这时候共用体就可以发挥极大的作用,而且使逻辑清晰,代码简单少量 最后修改:2021 年 05 月 29 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果文章有用,请随意打赏。