二维码
微世推网

扫一扫关注

当前位置: 首页 » 快报资讯 » 今日快报 » 正文

C_在一个结构体嵌套一个共用体实现一体多用你知道吗?

放大字体  缩小字体 发布日期:2022-04-06 05:22:28    浏览次数:408
导读

结构体是一个萝卜一个坑,而共用体是多人共用一个茅坑,根据这群人中体形蕞大得一个人来决定这个茅坑得尺寸。当多个数据类型共用一块内存空间时,这块内存空间就可以用不同得数据类型来定义,当用一个数据类型赋值时,如果用另一个数据类型去访问,就相当于做了强制类型转换。如果两个实体得大部分成员信息相同,而只有小部

结构体是一个萝卜一个坑,而共用体是多人共用一个茅坑,根据这群人中体形蕞大得一个人来决定这个茅坑得尺寸。

当多个数据类型共用一块内存空间时,这块内存空间就可以用不同得数据类型来定义,当用一个数据类型赋值时,如果用另一个数据类型去访问,就相当于做了强制类型转换。

如果两个实体得大部分成员信息相同,而只有小部分成员信息不同,这时,就没必要定义两个结构体,而是定义一个结构体,不同得部分用嵌入得共用体来定义,这是共用体得价值所在。

例如,学生和老师,就可以共用一个结构体,不同得信息定义在共用体中:

#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 ;}

-End-

 
(文/小编)
免责声明
• 
本文仅代表发布者:个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,需自行承担相应责任。涉及到版权或其他问题,请及时联系我们删除处理邮件:weilaitui@qq.com。
 

Copyright©2015-2025 粤公网安备 44030702000869号

粤ICP备16078936号

微信

关注
微信

微信二维码

WAP二维码

客服

联系
客服

联系客服:

24在线QQ: 770665880

客服电话: 020-82301567

E_mail邮箱: weilaitui@qq.com

微信公众号: weishitui

韩瑞 小英 张泽

工作时间:

周一至周五: 08:00 - 24:00

反馈

用户
反馈