【C语言】(19)联合体

38 阅读2分钟

联合体(Union)是一种数据结构,它可以在相同的内存位置存储不同的数据类型(但是一次只能存储其中一个)。与结构体相比,联合体是一种节省空间的方式,因为它只会分配足够存储最大成员所需的内存量。

联合体的声明

联合体通过union关键字来声明。联合体的语法类似于结构体,但其成员共享相同的内存位置。

union UnionName {
    type1 member1;
    type2 member2;
    type3 member3;
    // 更多成员
};

联合体的特性

  • 所有成员共享同一块内存空间。
  • 联合体的大小至少为其最大成员的大小。
  • 任一时刻,联合体只能存储一个成员的值,对一个成员的更新会影响到其他成员的值。

联合体的使用

联合体可以通过成员访问运算符(.)来访问其成员。与结构体相同,可以使用联合体变量和指向联合体的指针来访问成员。

示例代码

#include <stdio.h>

union Data {
   int i;
   float f;
   char str[20];
};

int main( ) {
   union Data data;        

   data.i = 10;
   printf( "data.i : %d\n", data.i);
   
   data.f = 220.5;
   printf( "data.f : %.2f\n", data.f);
   
   strcpy( data.str, "C Programming");
   printf( "data.str : %s\n", data.str);

   return 0;
}

在上面的例子中,联合体Data有三个成员:int ifloat fchar str[20]。尽管我们对它们进行了三次赋值,但只有最后一次赋值(data.str)会保留,因为这三个成员共享相同的内存位置。

联合体与结构体的比较

  • 内存占用:联合体只占用足以存储最大成员所需的内存量,而结构体的大小是所有成员大小之和。
  • 用途:当一个变量可能存储多种类型的数据,但同时只需要存储其中一种类型时,使用联合体可以节省内存空间。

注意事项

  • 在访问联合体的某个成员之前,确保已经正确地为该成员赋值。
  • 联合体广泛用于低级编程,如直接与硬件接口或协议编程,其中每个字节的空间都很宝贵。