union用法

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

1、定义共用体:
共用体的定义与结构体类似,使用 union 关键字,后跟共用体的名称和成员变量列表。共用体的成员变量可以是不同的数据类型,但它们共享同一块内存空间。

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

在上述示例中,我们定义了一个名为 MyUnion 的共用体,它包含了一个整型变量 i、一个浮点型变量 f 和一个字符型变量 c。

2、使用共用体:
可以通过共用体的名称和成员变量名来访问共用体的成员变量。由于共用体的成员变量共享同一块内存空间,只能同时存储其中一个成员变量的值。

union MyUnion u;
u.i = 10;
printf("Value of i: %d\n", u.i);
u.f = 3.14;
printf("Value of f: %.2f\n", u.f);

在上述示例中,我们声明了一个 MyUnion 类型的变量 u,并分别给 u.i 和 u.f 赋值。由于它们共享同一块内存空间,改变其中一个成员变量的值会影响到其他成员变量。

3、共用体的大小:
共用体的大小是其最大成员变量的大小。因为共用体的成员变量共享同一块内存空间,所以共用体的大小足够容纳最大的成员变量即可。

使用 sizeof 运算符可以获取共用体的大小。

需要注意的是,共用体虽然灵活,但也存在潜在的问题。由于共用体的成员变量共享同一块内存空间,因此在使用共用体时需要小心,确保对成员变量的访问和修改是合法的。此外,共用体的使用也可能导致类型转换和内存对齐等问题,因此在使用共用体时需要谨慎考虑。

下面是一个完整的示例代码,演示了共用体的定义和使用:

#include <stdio.h>
 
union MyUnion {
    int i;
    float f;
    char c;
};
 
int main() {
    union MyUnion u;
 
    u.i = 10;
    printf("Value of i: %d\n", u.i);
 
    u.f = 3.14;
    printf("Value of f: %.2f\n", u.f);
 
    printf("Size of union MyUnion: %zu\n", sizeof(union MyUnion));
 
    return 0;
}

输出结果:

Value of i: 10
Value of f: 3.14
Size of union MyUnion: 4

根据输出结果可知,共用体 MyUnion 的大小是4字节,因为 int 类型的大小为4字节,是共用体中最大的成员变量。

总结一下,共用体是C语言中一种特殊的数据类型,允许在相同的内存空间中存储不同类型的数据。它的定义和使用方式与结构体类似,但共用体的成员变量共享同一块内存空间。

需要注意共用体的大小、成员变量的访问和修改,以及潜在的类型转换和内存对齐问题。
                        
原文链接:https://blog.csdn.net/m0_74293254/article/details/134054841

posted @ 2024-04-21 00:25  流水江湖  阅读(15)  评论(0编辑  收藏  举报