C 语言 - 共用体
C 共用体
共用体类似于结构体,因为它可以存储不同数据类型的成员。
但是,它们之间存在一些差异:
- 在结构体中,每个成员都有自己的内存。
- 在共用体中,所有成员共享同一块内存,这意味着您一次只能使用其中一个值。
大多数时候,您会使用结构体而不是共用体,因为它可以同时存储和访问多个值,这在日常程序中更为常见。
然而,当您一次只需要存储几种可能类型中的一种,并且希望节省内存时,共用体就很有用。
声明共用体
要创建共用体,请使用 union 关键字,然后从中创建一个变量(就像结构体一样):
实例
union myUnion { // 共用体声明
int myNum; // 成员 (int)
char myLetter; // 成员 (char)
char myString[30]; // 成员 (char 数组)
};
int main() {
union myUnion u1; // 创建一个名为 "u1" 的共用体变量
return 0;
}
访问共用体成员
与结构体一样,要访问共用体的成员,请使用点 . 语法。
重要提示:由于所有成员共享同一块内存,更改一个成员会影响其他成员。只有最后赋值的成员才持有有效值:
实例
union myUnion {
int myNum;
char myLetter;
char myString[30];
};
int main() {
union myUnion u1;
u1.myNum = 1000;
// 因为这是最后写入共用体的值,所以 myNum 不再持有 1000 - 其值现在无效
u1.myLetter = 'A';
printf("myNum: %d\n", u1.myNum); // 此值不再可靠
printf("myLetter: %c\n", u1.myLetter); // 输出 'A'
return 0;
}
共用体的大小
共用体的大小始终与其最大成员的大小相同:
实例
union myUnion {
int myNum;
char myString[36];
};
int main() {
union myUnion u1;
printf("Size of union: %zu bytes\n", sizeof(u1));
return 0;
}
由于最大的成员是 36 字节,整个共用体也将是 36 字节。
如果这是一个结构体,大小将是 40 字节:
myNum (4 字节) + myString (36 字节) = 总共 40 字节
何时使用共用体
在以下情况下使用共用体:
- 您需要在同一位置存储不同的类型
- 您一次只使用一种类型
- 节省内存非常重要