我将如何有效地初始化以下数据结构(不花费任何计算)?它由一组 struct Register
组成。每个 struct Register
的 FieldArrayPointer 指向的数组长度将不同。我将如何提取指针(使用编译器指令?)并使用它来初始化 struct Register
数组?有没有其他方法可以创建这样的数据结构(我不想使用链表)?
(N可以任意大)
struct Field
{
char High;
char Low;
char Attribute;
} FieldArray[L0+L1+L2...+L(N-1)];
struct Register
{
unsigned int ResetValue;
unsigned int FieldArrayLength;
struct Field *FieldArrayPointer;
} RegisterArray[N] =
{ ResetValue0, L0, <Pointer of FieldArray[0].Field>,
ResetValue1, L1, <Pointer of FieldArray[L0].Field>,
ResetValue2, L2, <Pointer of FieldArray[L0+L1].Field>,
. . . . . . . . . . . . . . . . . . . . . . . . . . . . ,
ResetValue(N-1), L(N-1),<Pointer of FieldArray[L0+L1+..+L(N-2)].Field>
};
//L0,L1,L2.. and N are constant integers
最佳答案
假设 FieldArray
具有静态存储持续时间并且 L0
到 Ln
是整数常量表达式,您可以简单地执行以下操作:
struct Register
{
unsigned int ResetValue;
unsigned int FieldArrayLength;
struct Field *FieldArrayPointer;
} RegisterArray[N] =
{
{ ResetValue0, L0, FieldArray + 0 },
{ ResetValue1, L1, FieldArray + L0 },
{ ResetValue2, L2, FieldArray + L0 + L1 },
...
};
如果手写太麻烦,您可以编写一个代码生成器来创建源代码和#include
结果。
关于c - 在C中有效地初始化结构内部的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8568422/