首页 > 解决方案 > 结构中具有动态大小的 C 语言数组

问题描述

我已经搜索了很多,但还没有找到任何好的 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)

这个新手感谢您的帮助。

标签: arrayscpointerssize

解决方案


在 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);

请注意,const限定符 onwidgetCount没有意义,因为您无法对其进行初始化。


推荐阅读