结构中具有动态大小的C语言数组
C language array with dynamic size in structure
我搜索了很多,但还没有找到任何好的 c 解决方案。我想初始化一个动态大小的数组。目前看到的解决方案是链表,但似乎不符合我的要求。
目前我测试过的代码如下
typedef struct
{
const unsigned char widgetCount;
unsigned char index;
lv_obj_t * radiobtnVIEW[widgetCount];
}AssetVIEW;
然后初始化widgetCount
AssetVIEW View={4};
我得到的错误是
error: 'widgetCount' undeclared here (not in a function)
这位新手感谢您的帮助。
在 C 中,您不能在声明结构时引用结构中的其他字段。这就是错误消息所指的内容。如前所述,您可以使用指针或灵活的数组成员 (fam):
lv_obj_t **radiobtnVIEW;
lv_obj_t *radiobtnVIEW[];
对于 fam,您为所述字段动态分配内存:
size_t n = 4;
AssetVIEW *View = malloc(sizeof(*View) + n * sizeof(*View->radiobtnVIEW));
...
free(View);
请注意 widgetCount
上的 const
限定符没有意义,因为您无法对其进行初始化。
我搜索了很多,但还没有找到任何好的 c 解决方案。我想初始化一个动态大小的数组。目前看到的解决方案是链表,但似乎不符合我的要求。
目前我测试过的代码如下
typedef struct
{
const unsigned char widgetCount;
unsigned char index;
lv_obj_t * radiobtnVIEW[widgetCount];
}AssetVIEW;
然后初始化widgetCount
AssetVIEW View={4};
我得到的错误是
error: 'widgetCount' undeclared here (not in a function)
这位新手感谢您的帮助。
在 C 中,您不能在声明结构时引用结构中的其他字段。这就是错误消息所指的内容。如前所述,您可以使用指针或灵活的数组成员 (fam):
lv_obj_t **radiobtnVIEW;
lv_obj_t *radiobtnVIEW[];
对于 fam,您为所述字段动态分配内存:
size_t n = 4;
AssetVIEW *View = malloc(sizeof(*View) + n * sizeof(*View->radiobtnVIEW));
...
free(View);
请注意 widgetCount
上的 const
限定符没有意义,因为您无法对其进行初始化。