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

问题描述 投票:2回答:1

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

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有点新意,我对工会的处理不多。我想知道这是否足以解决这种情况。

谢谢

c unions
1个回答
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;

此外,从内部结构成员中删除名称使它们匿名,然后A1A2A3B1B2B3成员看起来好像他们是外部联盟的成员:

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

© www.soinside.com 2019 - 2024. All rights reserved.