C 共用体学习笔记
什么是共用体?
共用体(Union)是一种特殊的数据类型,它允许在同一块内存空间存储不同的数据类型。
如何定义共用体?
共用体的定义形式与结构体类似,但是在使用时只能存储某一个成员变量的值。
cCopy Codeunion MyUnion {
int i;
float f;
char c;
};
如何访问共用体成员?
共用体成员的访问方式和结构体一样,可以使用"."运算符或者"->"运算符。
cCopy Codeunion 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 CodeSize 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 CodeIP Address: 192.168.0.1
总结
共用体是一种特殊的数据类型,可以在同一块内存空间存储不同的数据类型。它的大小由最大成员的大小决定。可以用来作为高效的存储结构来存储不同类型的数据。