匿名联合内部结构
anonymous union inside structure
下面的代码提供了一个 O/P:
101:name_provided:name_provided
据我所知,联合一次只能容纳一个成员,但看起来两个值都是可见的,这是正确的还是代码有任何问题。
#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;
}
联合指定两个成员将位于内存中的同一位置。因此,如果您分配给 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 访问与您分配给的成员不同的成员的后果。
下面的代码提供了一个 O/P:
101:name_provided:name_provided
据我所知,联合一次只能容纳一个成员,但看起来两个值都是可见的,这是正确的还是代码有任何问题。
#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;
}
联合指定两个成员将位于内存中的同一位置。因此,如果您分配给 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 访问与您分配给的成员不同的成员的后果。