联合体/共用体:有时候同一内存空间存放类型不同,不同类型的变量共享一块空间。举个例子:
struct XuanMin
{
char name[32];
int tickets;
};
union xuanmin
{
int a;
char b;
double c;
};
int main()
{
struct XuanMin u1;
union xuanmin t1;
printf("结构体的大小:%d\n",sizeof(u1));
printf("联合体的大小:%d",sizeof(t1));
结构体的大小:36
联合体的大小:8
从中可知结构体有各自单独空间,而共用体元素共享空间,空间大小有最大类型确定。结构体元 素互不影响,共用体赋值会导致覆盖。
联合体一般配合结构体使用,在多个相同要求中的不同要求。一般采用结构体中放联合体。
struct Person
{
char name[30];
int age;
char sex;
char profession;
union D
{
int class;
char keMu[12];
}mes;
};
int main()
{
struct Person p[2];
int i;
for(i=0;i<2;i++)
{
printf("请输入职业:t代表老师,s代表学生\n");
scanf("%s",&(p[i].profession));
if(p[i].profession=='s')
{
printf("请输入学生班级:");
scanf("%d",&(p[i].mes.class));
printf("\n请输入学生名字:");
scanf("%s",&(p[i].name));
printf("\n请输入学生年龄:");
scanf("%d",&(p[i].age));
}
else
{
printf("请输入老师科目:");
scanf("%s",&(p[i].mes.keMu));
printf("\n请输入老师名字:");
scanf("%s",&(p[i].name));
printf("\n请输入老师年龄:");
scanf("%d",&(p[i].age));
}
}
for(i=0;i<2;i++)
{
if(p[i].profession=='s')
{
printf("学生班级:%d",p[i].mes.class);
printf("\n学生名字:%s",p[i].name);
printf("\n学生年龄:%d",p[i].age);
}
else
{
printf("老师科目:%s",p[i].mes.keMu);
printf("\n老师名字:%s",p[i].name);
printf("\n老师年龄:%d\n",p[i].age);
}
}
return 0;
}
最后补个枚举类型:
enum Weekday {sun,mon,tus,wed,thus,fri,sat};