作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
enum Enums { k1, k2, k3, k4 };
union MYUnion {
struct U{
char P;
}u;
struct U0 {
char state;
} u0;
struct U1 {
Enums e;
char c;
int v1;
} u1;
struct U2 {
Enums e;
char c;
int v1;
int v2;
} u2;
struct U3 {
Enums e;
unsigned int i;
char c;
} u3;
struct U4 {
Enums e;
unsigned int i;
char c;
int v1;
} u4;
struct U5 {
Enums e;
unsigned int i;
char c;
int v1;
int v2;
} u5;
} myUnion
我对 C++ 中 Union 的整个概念感到很困惑。这个“myUnion”在内存中是什么样子的?我知道数据共享同一个内存块,但是如何呢?尺寸是多少“我的联盟”?如果是“u5”的大小那么这 block 内存中的数据是如何分配的??
最佳答案
因此,在您的最后一个 union 中,如果您存储到 .i
,然后存储到 .e
,则 int 的第一个字节将被枚举值覆盖(假设 sizeof (enum)
在您的环境中为 1)。
union 就像:
void * p = malloc(sizeof(biggest_item))
Enums *ep = (Enums *)e;
unsigned int * ip = (unsigned int *)p;
char *cp = (char *)p;
*ep
、*ip
和 *cp
的赋值就像 union 一样。
关于c++ - union U在内存中是什么样子的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1777574/
我是一名优秀的程序员,十分优秀!