- 结构体的元素有独立空间 联合体的元素是共享空间,空间大小由最大的类型确定
- 结构体的元素互不影响,联合体赋值会导致覆盖
如图
结构体的元素地址不同,而且他的值也不相同
联合体的元素地址相同,但是他的值被最后的ddata覆盖了,导致前面两个值无法输出
eg.用同一个表格 来表示老师和学生的数据情况
#include<stdio.h>
struct Person
{
char name[32];
int age;
char zhiye;
char addr[32];
union D{
char class[12];
char kemu[12];
}mes;
};
int main()
{
struct Person p[2];
int i;
for(i=0;i<2;i++)
{
printf("请输入职业:t代表老师,s代表学生\n");
scanf("%c",&p[i].zhiye);
if(p[i].zhiye=='s')
{
printf("请输入学生的班级:\n");
scanf("%s",&p[i].mes.class);
printf("请输入学生名字:\n");
scanf("%s",&p[i].name);
}
else
{
printf("请输入老师的科目:\n");
scanf("%s",&p[i].mes.kemu);
printf("请输入老师名字:\n");
scanf("%s",&p[i].name);
}
getchar();
}
for(i=0;i<2;i++)
{
if(p[i].zhiye=='s')
{
printf("学生的名字是:%s,班级是%s\n",p[i].name,p[i].mes.class);
}
else{
printf("老师的名字是:%s,职业是%s\n",p[i].name,p[i].mes.kemu);
}
}
return 0;
}
效果图如下