一、什么是共用体有什么用?
C语言提供了一种构造类型的数据——共用体,它和结构体类似,也 是一种由用户自己定义的数据类型,也可以由若干不同类型的数据组合而 成,组成共用体的若干个数据也称为其成员。和结构体不同的是,结构体 变量每个成员分别占有各自的内存单元,共用体变量各个成员都从同一 地址开始存放,即成员间互相覆盖
union 共用体名
{
数据类型1 成员名1;
数据类型2 成员名2;
………
};
二、共用体的定义
先定义共用体类型,再定义共用体变量。一般格式为:
共用体类型名 变量名列表;
union data
{
int i;
char c;
float f;
};
union data d1,d2;
直接定义法是定义共用体类型的同时,定义共用体变量。 定义的一般形式如下:
union [共用体名]
{
数据类型1 成员名1;
数据类型2 成员名2;
………
}变量列表;
共用体变量引用的一般形式如下:
共用体变量名.成员名
在引用共用体类型数据时要注意以下几点:
①每一瞬间只有一个成员起作用,其他的成员不起作用。
②共用体变量中起作用的成员是最后一次存放的成员,在存入一 个新的成员后原有成员就失去作用。
③共用体变量的地址和它的各成员的地址都是同一地址。
④共用体类型可以出现在结构体类型定义中,也可以定义共用体 数组。反之,结构体也可以出现在共用体类型定义中,数组也可 以作为共用体的成员。
我们最后看一道题结束:
#include<stdio.h>
int main()
{
union
{
int i[2];
long k;
char c[4];
}r,*s=&r;
s->i[0]=0x39;
s->i[1]=0x38;
printf("%c\n", s->c[0]);
}
说明:r为共用体类型的变量,s为指向r的共用 体类型指针变量,其成员i、k、c共同占用4个字 节的存储单元,“s->i[0]=0x39;”为两个低字节 存储单元赋值十进制数57,“s->i[1]=0x38;”为 两个高字节存储单元赋值十进制数56,“printf (“%c\n”, s->c[0]);”以字符方式输出最低字节 的内容。字符’9’对应的ASCII码值为57,所以输 出结果为字符’9’。