联合体共用体的概念

  联合体/共用体:有时候同一内存空间存放类型不同,不同类型的变量共享一块空间。举个例子:

  

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};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值