以下代码提供了一个O / P:
101:name_provided:name_provided
AFAIK一个联盟一次只能容纳一个成员,但看起来两个值都是可见的,是正确的还是代码有什么问题。
#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;
}
答案 0 :(得分:0)
union指定两个成员都位于内存中的相同位置。因此,如果您分配到test1_struct
,然后从test2_struct
读取,则会将test1_struct
的内容解释为test2_struct
格式。
在这种情况下,两种结构都具有相同的格式,因此它不会对您读写的内容产生影响。使用两个成员都相同的联合通常没有意义。联合的通常目的是拥有不同类型的成员,但不需要为每个成员分别拥有单独的内存,因为您一次只需要使用一种类型。有关典型用例,请参阅How can a mixed data type (int, float, char, etc) be stored in an array?。
请参阅Unions and type-punning,了解访问不同于您指定成员的成员的后果。