前言:
此时大家对“c语言共用体结构体”大致比较注意,各位老铁们都想要剖析一些“c语言共用体结构体”的相关知识。那么小编同时在网摘上网罗了一些有关“c语言共用体结构体””的相关文章,希望同学们能喜欢,朋友们快快来学习一下吧!结构体是一个萝卜一个坑,而共用体是多人共用一个茅坑,根据这群人中体形最大的一个人来决定这个茅坑的尺寸。
当多个数据类型共用一块内存空间时,这块内存空间就可以用不同的数据类型来定义,当用一个数据类型赋值时,如果用另一个数据类型去访问,就相当于做了强制类型转换。
如果两个实体的大部分成员信息相同,而只有小部分成员信息不同,这时,就没必要定义两个结构体,而是定义一个结构体,不同的部分用嵌入的共用体来定义,这是共用体的价值所在。
例如,学生和老师,就可以共用一个结构体,不同的信息定义在共用体中:
#include <stdio.h> #include <stdlib.h>struct infor{ char name[20]; char sex[10]; int age; char identity; // s表示student、t表示teacher union otherinf{ // 根据identity区别设置信息 struct { char profession[10]; char department[20]; double salary; }teacher; struct { char num[20]; char department[20]; char major[20]; }student; }perinf;};void print(struct infor per[],int n){ int i; for(i=0;i<n;i++) { printf("\n姓名:%s\t性别:%s\t年龄:%d\n",per[i].name,per[i].sex,per[i].age); if('s'==per[i].identity) { printf("学生的学号:%s\t所属的院系:%s\t专业:%s\n",per[i].perinf.student.num, per[i].perinf.student.department,per[i].perinf.student.major); } else { printf("教师的职称:%s\t所属的院系:%s\t月薪:%6.2f\n\n",per[i].perinf.teacher.profession, per[i].perinf.teacher.department,per[i].perinf.teacher.salary); } } return ;}void input(struct infor per[],int n){ int i; for(i=0;i<n;i++) { printf("请依次输入姓名,性别,年龄,身份:"); scanf("%s%s%d%s",&per[i].name,&per[i].sex,&per[i].age,&per[i].identity); if('s'==per[i].identity) { printf("\n请依次输入学生的学号,所属的院系,专业:"); scanf("%s%s%s",&per[i].perinf.student.num,&per[i].perinf.student.department, &per[i].perinf.student.major); } else if('t'==per[i].identity) { printf("\n请依次输入教师的职称,所属的院系,月薪:"); scanf("%s%s%lf",&per[i].perinf.teacher.profession,&per[i].perinf.teacher.department, &per[i].perinf.teacher.salary); } else { printf("输入出错!\n"); exit(0); } } return ;} void main() { struct infor per[2]; input(per,2); print(per,2); while(1); return ;} /*张丽玲 女 35 t教授 电信学院 8900张晓明 男 22 s202060639 电信学院 信息与系统*/
-End-
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #c语言共用体结构体