共用体是什么
共用体将不同的数据类型组织为一个整体, 需要注意的是,共用体在同一时刻只能存储一个数据成员的值., 共用体变量的地址和它的格式成员的地址都是同一地址
共用体类型同结构体类型一样,都属于构造类型,它在定义上与结构体类型十分相似,定义共用体类型的语法格式如下:
union 共用体类型名称
{
数据类型 成员1;
数据类型 成员2;
。。。
数据类型 成员n;
};
共用体内的成员共用一块连续的内存,可以把定义好的共用体的大小取决于共用体中最大数据类型的字节数的大小
#include <stdio.h>
#include <stdlib.h>
union jg{
unsigned char a1;
unsigned int a2;
}b;
int main()
{
printf("请输入一个小于256的正整数\n");
scanf("%d",&b.a1); //对共用体a1进行储存
printf("第一次%d\t%d\n",b.a1,b.a2); //对共用体a1,a2进行输出
printf("请再次输入一个小于256的正整数\n");
scanf("%d",&b.a2); //对共用体a2进行储存
printf("第二次%d\t%d\n",b.a1,b.a2); //对共用体a1,a2进行输出
printf("请输入一个大于256的正整数\n");
scanf("%d",&b.a1); //对共用体a1进行储存
printf("第一次%d\t%d\n",b.a1,b.a2); //对共用体a1,a2进行输出
printf("请输入一个大于256的正整数\n");
scanf("%d",&b.a2); //对共用体a2进行储存
printf("第二次%d\t%d\n",b.a1,b.a2); //对共用体a1,a2进行输出
}
第一次输入小于256的正整数储存在a1当中,之所以要小于256是因为一个字节最大储存小于256数,储存之后因为a1,a2共用一块内存所以a2输出也是255。第二次输入储存在了a2中,因为是一字节,所以a1,a2都能正确读取。
第一次输入大于等于256的数储存在a1当中,对于a1来说尽管内存溢出,因此只能读取共用体中一个字节中的数,但对于整个结构体来说没有发生溢出,因此a2能正常输出。第二次输入时储存在a2当中,对a1也是溢出因此a1照样不能正常输出。
共用体能够可以说是按位读取在共用体之中char可以读取8位,int读取16位。共用体的储存方式是“先进后出”的储存方式为栈储存。