c - 结构内部的匿名 union

标签 c struct unions anonymous

以下代码提供了 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/

相关文章:

C - 无法将无符号字符数组转换为 double

c++ - 您是否可以使用 std::aligned_union 违反严格的别名规则

在 C 中类型转换 : gotchas

从 .h 文件调用函数

C++: union 析构函数

C Typedef 结构问题

c - c中的类型声明和声明结构

c - 使用 SSL 的服务器返回 "no certificate returned"

有人能解释一下为什么这个程序会这样吗?

C:将 char 转换为 float