匿名联合内部结构

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 访问与您分配给的成员不同的成员的后果。