0
点赞
收藏
分享

微信扫一扫

共用体类型

Go_Viola 2022-03-25 阅读 83
c语言

共用体类型可以在同一段内存单元存放不同类型的变量。一般形式为:

union 共用体类型名

{成员列表

}变量列表;如:

union Data
{
    int i;          //表示不同类型的变量i,ch,f能存放到同一段内存中
    char ch;
    float f;        
}a,b,c;            //在定义变量同时定义变量

共用体与结构体的区别

结构体变量所占用的内存长度是各成员所占的内存长度,每个成员都有自己的储存单元。而共用体变量所占的内存长度等于最长的成员所占的内存长度。如上面定义的共用体变量a,b,c各占4个字节而不是各占9个字节。

共用体类型数据的特点

(1)同一个内存段可以用来存放几种不同的类型成员,但在每一瞬间只能存放其中一个成员,而不是存放几个。

(2)可以对共用体成员进行初始化,但是初始化表中只能有一个常量。如:

union Data
{
	int i;
	char ch;
	float f;
} a={1,'a',1.5};			//错误,不能初始化3个成员,他们占用同一段存储单元 
union Data a={16};			//正确。对第一个成员初始化 
union Data a={.ch='j'};		//C99允许对指定的一个成员进行初始化 

(3)共用体变量中作用的成员是最后一次被赋值的成员,在对共用体变量中的一个成员赋值后,原有变量存储单元的值就被取代。

a.ch='a';
a.f=1.5;
a.i=40;

完成三个赋值运算后变量存储单元中的值为40,原来的值都被覆盖了,此时如果用printf("%d",a.i);输出结果为40。而如果用printf("%c",a.ch);则输出的值不是'a',而是'('。

(4)共用体变量的地址和它的成员的地址都是同一个地址。

(5)不能对共用体变量名赋值,也不能企图引用变量名来得到一个值。

(6)C99允许共用体变量作为函数参数

(7)共用体变量可以出现在结构体类型定义中,也可以定义共用体数组,反之也是一样。

举报

相关推荐

0 条评论