C 共用体学习笔记

什么是共用体?

共用体(Union)是一种特殊的数据类型,它允许在同一块内存空间存储不同的数据类型。

如何定义共用体?

共用体的定义形式与结构体类似,但是在使用时只能存储某一个成员变量的值。

cCopy Code
union MyUnion { int i; float f; char c; };

如何访问共用体成员?

共用体成员的访问方式和结构体一样,可以使用"."运算符或者"->"运算符。

cCopy Code
union MyUnion u; u.i = 10; // 访问 i 成员 printf("%d", u.i); u.f = 3.14; // 访问 f 成员 printf("%f", u.f);

共用体的应用场景

联合体大小

联合体的大小由最大成员的大小决定

cCopy Code
#include <stdio.h> #include <stdlib.h> union UnionTest{ int i; double d; }; int main() { printf("Size of union = %zu bytes\n", sizeof(union UnionTest)); }

输出结果:

Copy Code
Size of union = 8 bytes

联合体作为高效存储结构

当我们需要在程序中使用不同的类型,但是又不想浪费太多的内存时,可以使用共用体作为高效存储结构。

下面是一个例子,演示如何使用联合体来存储 IP 地址。

cCopy Code
#include <stdio.h> #include <stdlib.h> union IPAddress{ unsigned int i; unsigned char b[4]; }; int main() { union IPAddress ip; ip.b[0] = 192; ip.b[1] = 168; ip.b[2] = 0; ip.b[3] = 1; printf("IP Address: %d.%d.%d.%d\n", ip.b[0], ip.b[1], ip.b[2], ip.b[3]); return 0; }

输出结果:

Copy Code
IP Address: 192.168.0.1

总结

共用体是一种特殊的数据类型,可以在同一块内存空间存储不同的数据类型。它的大小由最大成员的大小决定。可以用来作为高效的存储结构来存储不同类型的数据。