以下代码提供了 O/P :
101:name_provided:name_provided
据我所知, union 一次只能容纳一个成员,但看起来两个值都是可见的,这是正确的还是代码有问题。
#include <stdio.h>
struct test1{
char name[15];
};
struct test2{
char name[15];
};
struct data{
int num;
union{
struct test1 test1_struct;
struct test2 test2_struct;
};
};
int main()
{
struct data data_struct={101,"name_provided"};
printf("\n%d:%s:%s",data_struct.num,data_struct.test1_struct.name,data_struct.test2_struct.name);
return 0;
}
最佳答案
union 指定两个成员将位于内存中的同一位置。因此,如果您分配给 test1_struct
然后从test2_struct
读取,它将解释 test1_struct
的内容就好像它的格式是test2_struct
.
在这种情况下,两种结构具有相同的格式,因此您读取和写入的结构没有区别。使用两个成员相等的 union 通常没有意义。 union 的通常目的是拥有不同类型的成员,但不需要为每个成员拥有单独的内存,因为您一次只需要使用一种类型。请参阅How can a mixed data type (int, float, char, etc) be stored in an array?对于典型的用例。
并参见 Unions and type-punning了解访问与您分配的成员不同的成员的后果。
关于c - 结构内部的匿名 union ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44172739/