C语言的共用体
程序员文章站
2022-07-11 18:52:55
...
C语言的共用体
1.共用体类型
union 共用体名
{
成员表列
};
如:
union Data
{
int i;
char ch;
float f;
}; //注意这里有分号
2.定共用体类型变量
1/ union Data Data1,Data2; //定义两个变量
2/ 在声明类型的同时定义变量
union Data
{
int i;
char ch;
float f;
} Data1,Data2;
3/ 不指定类型名而直接定义结构体类型变量
union
{
成员表列
} 变量名表列;
//共用体与结构体定义形式相似。
结构体变量所占内存长度是各成员占的内存长度之和,
而共用体变量所占的内存长度等于最长的成员的长度。
所以上union Data类型变量占用4个字节。(因为一个float变量占4个字节)
3.引用共用体变量
//不能引用共用体变量,只能引用共用体变量的成员。
如
Data1.i //可以,引用共用体变量中的整型变量i
printf("%d",Data1) //不可以
因为变量Data1的存储区可以按不同的类型存放数据,有不同的长度,仅写共用体变量名a,系统无法知道究竟应输出哪一个成员的值。
4.共用体变量特点
- 同一个内存段可以用来存放几种不同类型的成员,但每一瞬时只能存放其中一个成员,而不是同时存放多个;
- 可以对共用体变量初始化,但初始化表中只能有一个常量。
union Data
{
int i ;
char ch;
float f;
} a = {1,'a',1.5}; //错误,不能初始化3个成员,它们占用同一段存储单元
union Data a = {16}; //正确,对第一个成员初始化
union Data a = {.ch = 'j'}; //C99允许对指定的一个成员初始化
- 共用体变量中起作用的成员是最后一次被赋值的成员。
- 共用体变量的地址和它的各成员的地址都是同一 地址。(&a.i,&a.c,&a.f都是同一值)
- 不能对共用体变量名赋值,也不能企图引用变量名来得到一个值。
- 以前的C规定不能把共用体变量作函数参数,C允许;共用体变量的指针作函数参数一直允许。
- 共用体类型可以出现在结构体类型中,也可以定义共用体数组。