并集 (C++) 中出现意外结果

Unexpected result in union (C++)

本文关键字:意外 结果 C++ 并集      更新时间:2023-10-16

我在高中学习,我正在制作一个程序,只是为了了解工会是如何运作的,但该计划给了我意想不到的结果。

这是程序:

#include <iostream>
using namespace std;
union c{
    int l;
    int b;
    int h;
    int vol;
};
int main() {
    c box;
    box.l=1;
    box.b=2;
    box.h=3;
    box.vol = box.l*box.b*box.h;
    cout<<"n Volume :-  "<<box.vol;
    return 0;
}

输出如下:

 Volume :-  27

我想了解为什么会发生这种情况。

您遇到此问题是因为您将union视为struct

联合分配一个内存空间,该内存空间可以包含任何元素,但不能包含所有元素。 按照您编写的方式,有三个名称有效地指向同一地址。 这意味着,根据分配,您最终会在分配的空间中放入 3。

换句话说,你

编写这个的方式,你只是创建了四种引用相同数据的方式。

使用联合的方法的一个示例是描述两个或多个替代结构。 例如:

union Shape {
  struct triangle {
    int base;
    int height;
  }
  struct rectangle {
    int length;
    int width;
  }
}

现在,您可以使用单个数据类型来处理任一情况。