首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C:在编译时在struct中初始化自定义数组大小

C:在编译时在struct中初始化自定义数组大小
EN

Stack Overflow用户
提问于 2022-11-09 20:56:58
回答 6查看 92关注 0票数 0

考虑以下代码:

代码语言:javascript
运行
复制
typedef struct Object
{
  uint8_t size;
  uint8_t array[];
}Object;

如何使对象具有编译时但用户定义的大小数组?

在阅读了一些堆栈溢出帖子并亲自尝试了代码之后,我现在知道,只要我至少使用编译器标准的C99,我就可以声明具有如下自定义大小的对象:

代码语言:javascript
运行
复制
Object o = {.size = 2, .array = {1, 2}};

但是我想要的只是一个具有自定义大小的空数组,而不是键入

代码语言:javascript
运行
复制
Object o = {.size = 5, .array = {1, 2, 3, 4, 5}};

我想打个类似的字

代码语言:javascript
运行
复制
Object o = {.size = 5, .array = uint8_t[5]};

同样重要的是,我需要在编译时知道数组的大小,不能像malloc那样使用动态内存,所以使用malloc分配的灵活数组成员的典型解决方案不会适用于我。

像这样的解决方案存在吗?

如果它不存在:为什么第一个示例能够工作(对于某些编译器来说),但只是告诉编译器在编译时需要一个10大小的数组,而不初始化其中的值呢?

编辑:我想我应该清楚地表明,我的目标是创建类似于C++ std::array的东西,因为有了这种数据类型,用户就可以选择数组的大小,而不必知道内部的工作原理,并且为每一个新的大小重写结构。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74381285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档