月望村吧 关注:3贴子:696
  • 5回复贴,共1

共用体(Union)

只看楼主收藏回复

共用体(Union)是一种特殊的数据结构,它允许在同一块内存空间中存储不同类型的数据。
在共用体中,所有成员共享同一块内存,每次只能使用其中一个成员,而不是同时使用多个成员。这意味着对共用体的修改可能会影响到其他成员。
共用体的语法类似于结构体,但是共用体的所有成员都从同一起始位置开始,因此它们共享相同的内存地址。共用体的大小取决于其最大的成员的大小。
共用体通常用于需要在不同类型之间进行切换或者对同一块内存进行不同方式的解释的情况。例如,可以使用共用体来表示一个值可以是整数、浮点数或者字符的情况。
下面是一个使用共用体的简单示例:


IP属地:江苏1楼2024-06-08 11:34回复
    #include <iostream>
    union Data {
    int i;
    float f;
    char c;
    };
    int main() {
    Data data;
    data.i = 10;
    std::cout << "Integer value: " << data.i << std::endl;
    data.f = 3.14f;
    std::cout << "Float value: " << data.f << std::endl;
    data.c = 'A';
    std::cout << "Character value: " << data.c << std::endl;
    return 0;
    }


    IP属地:江苏2楼2024-06-08 11:34
    收起回复
      共用体(Union)也称为联合,它是一种特殊的数据结构。
      共用体的特点是不同的成员共享同一块内存空间,在某一时刻只有一个成员起作用。
      共用体可以在结构体或类中使用。
      是的,在任何时刻,共用体里的数据类型只有一种类型的数据是有效的,对一个成员的赋值会覆盖其他成员的值。
      以下是一个简单的示例:


      IP属地:江苏3楼2024-06-08 11:37
      回复
        #include <iostream>
        struct UnionStruct {
        union {
        int intValue;
        float floatValue;
        char charValue;
        } data;
        };
        class UnionClass {
        public:
        union {
        int intValue;
        float floatValue;
        char charValue;
        } data;
        };
        int main() {
        UnionStruct structObj;
        structObj.data.intValue = 10;
        std::cout << "Integer value: " << structObj.data.intValue << std::endl;
        structObj.data.floatValue = 3.14f;
        std::cout << "Float value: " << structObj.data.floatValue << std::endl;
        structObj.data.charValue = 'A';
        std::cout << "Character value: " << structObj.data.charValue << std::endl;
        UnionClass classObj;
        classObj.data.intValue = 20;
        std::cout << "Integer value: " << classObj.data.intValue << std::endl;
        classObj.data.floatValue = 6.28f;
        std::cout << "Float value: " << classObj.data.floatValue << std::endl;
        classObj.data.charValue = 'B';
        std::cout << "Character value: " << classObj.data.charValue << std::endl;
        return 0;
        }


        IP属地:江苏4楼2024-06-08 12:43
        收起回复