在联合体内使用相同类型的多个结构

时间:2019-03-22 00:25:40

标签: c unions

目前,我有一个结构,其中包含一个相同类型的布尔值列表,例如:

typedef unsigned char U8
typedef struct
{
  U8  A1
  U8  A2
  U8  A3
  U8  B1
  U8  B2
  U8  B3
} NewStruct;

我正在尝试使用联合将这些成员分为A组和B组(因为这些组实际上包含100多个变量),因此人们可以调用A组或B组并在此过程中节省一些内存:

typedef unsigned char U8
typedef union
{
    typedef struct
    {
      U8  A1
      U8  A2
      U8  A3
    } NewStruct_1;

    typedef struct
    {
      U8  B1
      U8  B2
      U8  B3
    } NewStruct_2;
} NewUnion;

我对C有点陌生,我对工会并没有太多处理。我想知道这是否是解决这种情况的充分/有用的方法。

谢谢

1 个答案:

答案 0 :(得分:1)

使用两个相似结构的并集并非没有道理。 (如果没有更多信息,您不能说这对您的特定情况很好。)

正确的语法是:

typedef unsigned char U8;
typedef union
{
    struct
    {
        U8  A1;
        U8  A2;
        U8  A3;
    } NewStruct_1;

    struct
    {
        U8  B1;
        U8  B2;
        U8  B3;
    } NewStruct_2;
} NewUnion;

另外,从内部结构成员中删除名称会使它们成为匿名名称,然后A1A2A3B1B2,和B3成员看起来就像是外部工会的成员一样:

typedef unsigned char U8;
typedef union
{
    struct
    {
        U8  A1;
        U8  A2;
        U8  A3;
    };

    struct
    {
        U8  B1;
        U8  B2;
        U8  B3;
    };
} NewUnion;

然后,如果xNewUnion,则可以使用x.A1而不是x.NewStruct_1.A1