C语言之共用体

时间:2023-03-08 15:46:31

最近在复习C语言,特再次记录:

有时需要将几种不同类型的变量存放到同一段内存单元中。如一个int、float、char放在同一个地址开始的内存单元中。,也就是使用覆盖技术,几个变量相互覆盖,称之为共用体。

union 共用体名

{

  int i;

  float f;

  char ch;

} ;

union 共用体名 a, b, c;

可以看到,和结构体的定义形式很相似,但它们的含义不同。

结构体变量所占内存长度是各成员占的内存长度之和,每个成员分别占有其自己的内存单元。

共用体变量所占内存长度等于最长的成员占的内存长度。

不能只引用共用体变量,必须指定使用的是哪一个成员的值。

注意:

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

  2.共用体变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后原有的成员就失去了作用。

  3.共用体变量的地址和他的各成员的地址都是同一地址。

  4.不能对共用体变量名赋值,也不能企图引用变量名来的得到一个值,不能在定义共用体变量时对他初始化。

  5.不能把共用体变量作为函数指针,也不能使函数带回共用体变量,但可以使用指向共用体变量的指针。

  6.共用体类型可以出现在结构体类型定义中,也可以定义共用体数组,反之也可以。