共用体
什么是共用体
修改其中一个共用体变量的值,其他的也会被改变,因为它们所用的空间是一样的。
#include "stdio.h"
union data{
int n;
char ch;
short m;
};
void main(){
union data a;
//原本是要占用7个字节,int 4 + char 1 + short 2 = 7
//共用体以占用最大空间的数据类型大小为准(共享空间)
printf("%d",sizeof(a));//4
}
案例
#include <stdio.h>
#define TOTAL 1 //人员总数
//定义结构体Person
struct Person {
char name[20];
int num; //编号
char sex; //f = 女 , m = 男
char profession;//职员 s=学生,t=老师
//共用体,用于存储老师学科或学生成绩,为了节省空间,用同一个空间存储不同的数据类型
union {
float score;
char course[20];
} sc;
};
void main() {
struct Person persons[TOTAL];
//输入人员信息
for (int i = 0; i < TOTAL; ++i) {
printf("input info:");
scanf("%s %d %c %c", persons[i].name, &(persons[i].num), &(persons[i].sex), &(persons[i].profession));
if (persons[i].profession == 's') {
printf("请输入学生成绩:");
scanf("%f", &persons[i].sc.score);
} else {
printf("请输入老师授课课程:");
scanf("%s", persons[i].sc.course);
}
fflush(stdin);//刷新
}
printf("\n名字\t编号\t性别\t职业\t成绩/课程\n");
for (int i = 0; i < TOTAL; ++i) {
//是学生
if (persons[i].profession == 's') {
printf("\n%s\t%d\t%c\t%c\t%.2f\n", persons[i].name, persons[i].num, persons[i].sex, persons[i].profession,
persons[i].sc.score);
} else {//是老师
printf("\n%s\t%d\t%c\t%c\t%s\n", persons[i].name, persons[i].num, persons[i].sex, persons[i].profession,
persons[i].sc.course);
}
}
/*
* input info:小李 2 m t
请输入老师授课课程:数学
名字 编号 性别 职业 成绩/课程
小李 2 m t 数学
*/
}