Tag: 联盟

使用union名称访问union成员

如何访问结构中存在的union成员? 考虑代码段: struct Emp { char name[20]; union address { char addr[50]; }; }; struct Emp e; 使用e ,如何在不创建任何联合对象的情况下访问addr类型?

C中的结构和联合,确定大小和访问成员

所有, 这是一个关于联盟的例子,我觉得这很令人困惑。 struct s1 { int a; char b; union { struct { char *c; long d; } long e; }var; }; 考虑到char是1个字节, int是2个字节, long是4个字节。 这里整个结构的大小是多少? 联合大小是{size of char *} + {size of double}? 我很困惑,因为在union中包含了struct。 另外,如何访问struct中的变量d 。 var.d ?

了解联合的内存内容

假设我定义了一个这样的联合: #include int main() { union u { int i; float f; }; union u tst; tst.f = 23.45; printf(“%d\n”, tst.i); return 0; } 有人能告诉我tst存储的内存会是什么样的? 我想了解这个程序产生的输出1102813594 。

何时使用联合以及何时使用结构

我知道联盟和结构之间的差异。 但是从设计和编码的角度来看,使用union而不是结构的各种用例是什么? 一个是空间优化。 使用它们还有什么好处吗?

工会成员如何存储?

union test { int i; char ch; }t; int main() { t.ch=20; } 假设sizeof(int)==2并且为t分配的内存地址是2000,2001。 然后在哪里20即t.ch存储 – 在2000年或2001年或取决于机器的字节顺序?

结构错误中的联合

我有以下结构: struct type1 { struct type2 *node; union element { struct type3 *e; int val; }; }; 当初始化一个指向type1实例的指针*f并执行类似: f.element->e或甚至只是f.element ,我得到: error: request for member ‘element’ in something not a structure or union 我在这里监督什么?

C中未命名的结构/联合有什么好处?

我发现一个代码实现为下面显示的类似演示.. struct st { int a; struct { int b; }; }; 6.58 struct/union未命名的struct/union字段 在ISO C11允许的范围内。 但它有什么好处呢? 因为无论如何我可以以相同的方式访问数据成员 int main() { struct st s; sa=11; sb=22; return 0; } 在gcc 4.5.2上编译,用 gcc -Wall demo.c -o demo 并没有错误,

共同第一成员的结构联盟

我不确定代码是否在断言转换中具有指针别名(或其他标准一致性问题)。 似乎指向联合类型的指针应该能够转换为第一个成员的指针,因为联合只由这两个结构组成,我认为对第一个成员的强制转换应该有效,但我不是确定这是否正确,或者我是否在过程中掩盖了填充细节。 工会是否需要填补高位? 这似乎是未指明的行为? 有没有人知道这是否被支持。 我知道有一种替代的标准方法可以通过使用带有enum type字段和struct container_storage成员的struct container_storage这一点,但考虑到此信息已经struct contained在struct contained ,这似乎是浪费空间 linux中的编译命令: gcc -std=c99 -Wextra -pedantic -fstrict-aliasing test.c && ./a.out && echo $? 返回0 #include #include enum type {type_a = 1, type_b = 2}; struct contained { int some_other_field; enum type type; }; struct container_a { struct contained contained; int test; }; struct container_b […]

如何使用嵌套在没有名称的struct中的c union

我正在研究所谓的Hotspot开源项目,看看实现我在struct中找到了一个令人讨厌的嵌套联合: typedef struct RC_model_t_st { union { struct block_model_t_st *block; struct grid_model_t_st *grid; }; /* block model or grid model */ int type; thermal_config_t *config; }RC_model_t; 据我所知,在C / C ++中,联合是不可接受的。 那么有人如何利用以这种方式和目的宣布的工会呢? 谢谢!

联盟元素对齐

如果我有一个联合,C标准保证联合本身将与最大元素的大小对齐。 union U { long l; int i; short s; char c[2]; } u; 但它对联盟内各个联盟元素的对齐有什么看法呢? 以下表达式是否保证是真的? (&u.l == &u.i) && (&u.i == &u.s) && (&u.s == &u.c[0])