共用体类型:
? ? ? ? 共用体中所有的成员共用一段内存(所有成员的起始地址都是一样的)
格式:
union 共用体名
{
成员列表;
};
注:
1.成员列表定义该共用体的成员,成员定义的方式与普通变量的方式一样。
2.成员列表必须用一对花括号括起。
3.共用体名可以省略。
如:
union data
{
int i;
char ch[10];
float s;
};
//定义了一个data的共用体类型,该类型有三个成员
?共用体变量的定义
? ? ? ? 1.先定义类型,在定义变量
union data
{
int i;
char ch[10];
float s;
};
union data a1;
? ? ? ? 2.定义类型的同时,定义变量
union data
{
int i;
char ch[10];
float s;
}a1;
? ? ? ? 3.直接定义变量
union
{
int i;
char ch[10];
float s;
}a1;
????????注:由于共用体类型的所有成员都共用同一段内存,所以共用体类型变量所占字节数等于该共用体类型中占用字节数最多的成员所占的字节数。sizeof(a1)>=10
共用体变量的引用:
? ? ? ? 1.不能整体引用共用体变量,只能引用其他成员? 引用的格式:共用体变量名.成员名
? ? ? ? 2.同类型成员共享值
? ? ? ? 3.在内存中整型数据的二进制数低8位占用前面一个字节,高8位占用后面一个字节。(高位放高地址,低位放低地址)
? ? ? ? ? ? ? ? 如:整数255,在内存中存储的形式为:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 11111111 00000000? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?一个字符型数据占用一个字节,对于数组来说前面元素占用前面的字节。
? ? ? ? 4.共用体变量之间可以相互赋值,赋值后两个变量应使用同一成员。
? ? ? ? 5.共用体变量的地址与各成员的地址都相同。
? ? ? ? 6.在定义共用体时,可以对其进行初始化,但只能有一个初值,且必须用花括号将初值括起。相当于给第一个成员赋值。
? ? ? ? 7.共用体、结构体的成员均可以是共用体或结构体类型。
? ? ? ? 8.不能用共用体类型变量作为函数参数
? ? ? ? 9.计算共用体占用字符数