2

我创建了一个名为 Register 的结构,其中包含大约 8 个字段。我现在想创建一个名为 Instrument 的结构,它应该具有可变数量的字段,每个工具都有 6 个字段,加上一定数量的字段,具体取决于分配给它的寄存器的数量。我怎样才能创建这个?

为了清楚起见,这是我想要创建的(尽管可能不准确)。

    typedef struct {
   int    x;
   int    y;
   int    z;
} Register;

 typedef struct {
       int    x;
       int    y;
       int    z;
       Register Reg1;
       Register Reg2;
       ...
    } Instrument;
4

2 回答 2

5

您可以使用灵活的数组成员来实现相同的目的。

就像是

typedef struct {
       int    x;
       int    y;
       int    z;
       Register Reg1;
       Register Reg2;  //upto this is fixed....
       Register Reg[];
       } Instrument;

然后,您可以根据需要分配内存以供someVar.Reg以后使用。

例如,引用C11第 §6.7.2.1/20 章

示例 2声明后:

   struct s { int n; double d[]; };

该结构struct s具有灵活的数组成员d。一个典型的使用方法是:

int m = /* some value */;
struct s *p = malloc(sizeof (struct s) + sizeof (double [m]));

并假设调用malloc成功,在大多数情况下,指向的对象的p行为就像 p被声明为:

struct { int n; double d[m]; } *p;
于 2016-08-04T14:24:17.983 回答
2

您可以使用指针

typedef struct 
{
   int    x;
   int    y;
   int    z;
   Register *reg;
} Instrument;

在代码中使用它

Instrument a.reg = malloc(sizeof(Register)*NUM_OF_REGISTERS);
if (a.reg != NULL)
{
   // your STUFF
   free(a.Reg);
}
于 2016-08-04T14:30:36.483 回答