C语言(十一)-共同体类型

共同体类型

写在前面

  • 共用体类型就是,把几个变量储存在同一个地址开始的内存种,用到了覆盖技术,后一个数据覆盖前面的数据
union 共用体名
{
	成员列表
}变量列表

声明定义方式与结构体类型变量一致,初始化方式不同。结构体变量可以给出初始化表一次性全部初始化,但是共用体变量一次只能初始化一个变量成员。

union Data
{
	int i;
	char ch;
	float score;
}

这说明共用体可以存放三种数据,但是每一瞬时只能存一种数据,而且如果对其成员初始化的化,留下的是最后赋值的哪一个,前边赋值的变量会被覆盖,比如

union Data a;
a.i=1;
a.ch="A";
a.score=99.0;

如果输出a.i就不会是1;

  • 不能直接引用共用体变量但是可以引用成员,这一点与结构体也一样,因为结构体和共用体变量里边存储不同了不同类型的变量,出储存区按不同类型存放数据,有不同的长度,如果直接引用变量名,系统不知道输出哪一个成员。

  • 共用体变量的地址和其成员的地址是同一个地址。

何时用

在数据处理的时候,有时候需要对一段空间安排不同的用途,这时候用共用体数据比较方便,增加程序的灵活性。

例题

若干人员,包含老师和学生。老师信息包括学号,名字,性别和职务。学生信息包括学号,名字,姓名和班级。这个时候班级和职务就可以用共用体

#include<stdio.h>
struct
{
	int num;
	char name[20];
	char sex;
	char job;
	union
	{
		int clas;
		char position[20];
	}category;
}people[2];

int main()
{
	int i,j;
	printf("please inout information:\n");
	for (i = 0; i < 2; i++)
	{
		scanf_s("%d", &people[i].num);
		scanf_s("%s", people[i].name,sizeof(people[i].name));
		scanf_s("%c",&people[i].sex,sizeof(&people[i].sex));

		scanf_s("%c",&people[i].job,sizeof(&people[i].job));
		for (j = 0; j < 10000; j++);
		if (people[i].job == 's')
		{
			printf("请输入班级:");
			scanf_s("%d", &people[i].category.clas);
		}
		else if (people[i].job == 't')
		{
			printf("请输入职务:");
			scanf_s("%c", &people[i].category.position, sizeof(people[i].category.position));
		}
	
		else
			printf("this is an error");
	}
	printf("output\n");
	printf("num     name        sex      job      class/position");
	for (i = 0; i < 2; i++)
	{
		if (people[i].job == 's')
		{
			printf("%d    %s       %c       %c    %d", people[i].num, people[i].name, people[i].sex, people[i].job, people[i].category.clas);
		}
		else
			printf("%d    %s       %c       %c    %c", people[i].num, people[i].name, people[i].sex, people[i].job, people[i].category.position);


	}
}

有些错误但是意思到了

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
C语言中的结构体(struct)和共用体(union)是用于组织和管理多个不同类型的数据的机制。 结构体是由不同类型的变量组成的数据集合。它可以将不同类型的变量封装在一个单独的对象中,方便对这些变量进行操作和管理。结构体的定义使用关键字struct,可以在结构体中定义多个成员变量,每个成员变量可以是不同的数据类型。结构体的定义通常放在函数外部,以便在程序的多个地方使用。 示例代码: ``` // 定义一个结构体 struct Person { char name[20]; int age; float height; }; // 使用结构体 int main() { // 创建一个结构体变量 struct Person person1; // 对结构体成员赋值 strcpy(person1.name, "John"); person1.age = 25; person1.height = 1.8; // 输出结构体成员 printf("Name: %s\n", person1.name); printf("Age: %d\n", person1.age); printf("Height: %.2f\n", person1.height); return 0; } ``` 共用体是一种特殊的数据类型,它允许多个不同类型的成员共用同一块内存空间。共用体的定义使用关键字union,所有成员都共享同一块内存,但只能同时使用一个成员。共用体适用于在不同的数据类型中存储相同类型的数据,节省内存空间。 示例代码: ``` // 定义一个共用体 union Data { int i; float f; char str[20]; }; // 使用共用体 int main() { union Data data; // 对共用体成员赋值 data.i = 10; // 输出共用体成员 printf("i: %d\n", data.i); // 在共用体中赋值给不同的成员 strcpy(data.str, "C programming"); printf("str: %s\n", data.str); return 0; } ``` 总结: - 结构体用于组织和管理多个不同类型的数据,每个成员有独立的内存空间。 - 共用体用于节省内存空间,多个成员共享同一块内存空间,但只能同时使用一个成员。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星光技术人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值