并集 (C++) 中出现意外结果
Unexpected result in union (C++)
我在高中学习,我正在制作一个程序,只是为了了解工会是如何运作的,但该计划给了我意想不到的结果。
这是程序:
#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;
}
}
现在,您可以使用单个数据类型来处理任一情况。
相关文章:
- 尝试将字符串/字符转换为整数会产生意外结果
- RapidXML - 代码创建意外结果
- 类中静态函数C++意外结果
- 指针数组中的意外结果
- 使用指针访问数组元素时出现意外结果
- 使用 sprintf 和 %g 将双精度转换为字符串的意外结果
- C++:比较运算符>和字符串文本的意外结果
- 具有意外结果的 C++ 闭包
- yaml-cpp 比较的意外结果
- 每次都出现意外结果
- 在 Qt 中解析嵌套的 JSON 时出现意外结果(数组不存在)
- 如何避免 std::abs 的意外结果?
- 使用嵌套 if 语句的意外结果
- A ^= B ^= A ^= B;C# Visual Studio 中的意外结果
- 逻辑错误,我将获得意外结果
- 在 c++ 中使用异步的意外结果
- 从函数的返回值将元素C++存储到 std::vector 中时出现意外结果
- 执行递增和递减时"cout"链接会产生意外结果
- OpenCL - 内核方法返回意外结果
- C++使用 std::get_time 解析 YYMMDD ISO 8601 日期字符串会得到意外结果