我在高中学习,我正在制作一个程序只是为了理解工会如何运作,但该计划给了我意想不到的结果。
这是该计划:
#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
我想知道为什么会这样。
答案 0 :(得分:3)
您遇到此问题是因为您将union
视为struct
。
Union分配一个内存空间,该内存空间可以包含任何元素,但不包含所有元素。在您编写它的方式中,有三个名称有效地指向相同的地址。这意味着,根据分配,您最终会将3放入已分配的空间。
换句话说,您编写本文的方式,您只需创建四种引用相同数据的方法。
使用联合的方法的一个示例是描述两个或更多个替代结构。例如:
union Shape {
struct triangle {
int base;
int height;
}
struct rectangle {
int length;
int width;
}
}
您现在可以使用单一数据类型来处理这两种情况。
答案 1 :(得分:0)
union是C中可用的特殊数据类型,允许在同一内存位置存储不同的数据类型。您可以定义具有许多成员的联合,但在任何给定时间只能有一个成员包含值。联合提供了一种有效的方法,可以将相同的内存位置用于多用途。
union标签是可选的,每个成员定义都是普通的变量定义,例如int i;或漂浮f;或任何其他有效的变量定义。在union的定义结束时,在最后一个分号之前,您可以指定一个或多个union变量,但它是可选的。以下是定义名为Data的联合类型的方式,该联合类型具有三个成员i,f和str -
union Data {
int i;
float f;
char str[20];
} data;
现在,Data类型的变量可以存储整数,浮点数或字符串。这意味着单个变量,即相同的存储器位置,可用于存储多种类型的数据。您可以根据需要在联合内部使用任何内置或用户定义的数据类型。