我创建了一个名为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;
答案 0 :(得分:5)
您可以使用flexible array members来实现相同目标。
像
这样的东西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;
答案 1 :(得分: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);
}