用数据填充未指定大小的数组

Posted

技术标签:

【中文标题】用数据填充未指定大小的数组【英文标题】:Fill Array of unspecified Size with data 【发布时间】:2020-04-07 19:25:45 【问题描述】:

所以我现在正在学习 C++,我现在很困。我已经在 Internet 表单中研究了一段时间,但找不到解决我的问题的方法。也许是因为我不知道要照顾什么..

对于可能具有误导性的标题,请原谅,但问题是:

假设我有一个名为 Data 的结构,其中包含一个 int 数组和一些其他成员

struct Data
...
uint8_t values [];

现在我有一个方法测试

void test (uint8_t *buffer, size_t buffer_size)

...



在该方法中,我创建了一个 Data 实例,我想将存储在缓冲区中的值分配给该 Data 实例的数组,但我不知道如何做到这一点。 不确定,但也许我需要一个 指针指针?

提前致谢! 干杯

【问题讨论】:

你在找std::vector 您不应将指针用于您显示的任何代码。除非这是学术要求。 嗯,它是一种学术要求(不使用指针,我有一个我必须使用的框架,其中包括结构和方法)。 如果您不允许使用 std::vector,您可以使用 new[] 和 delete[] 创建自己的矢量类 相关:https://***.com/questions/13431567/how-to-make-an-array-with-a-dynamic-size-general-usage-of-dynamic-arrays-maybe 【参考方案1】:

在 c++ 中,您可以使用 STL std::vector。你可以声明它:

struct Data
...
std::vector<uint8_t> values;

然后在方法测试中:

void test (uint8_t *buffer, size_t buffer_size)

...
    struct Data istanceData;
    for (int i=0 ; i < buffer_size; ++i)
        istanceData.values.push_back(buffer[i]);
    

如果您想在“测试”函数之外使用它,请记住动态分配结构数据(并返回它的指针)。 您还可以将一个额外的参数传递给“test”函数,并以这种方式将 istanced Struct Data 与引用一起传递:

void test (uint8_t *buffer, size_t buffer_size, struct Data &instanceData)

...
    for (int i=0 ; i < buffer_size; ++i)
        istanceData.values.push_back(buffer[i]);
    

【讨论】:

如果有用请投票 不能,我还没有足够的声望

以上是关于用数据填充未指定大小的数组的主要内容,如果未能解决你的问题,请参考以下文章

C 语言字符串 一级指针 内存模型 ( 指定大小字符数组 | 未指定大小字符数组 | 指向常量字符串的指针 | 指向堆内存的指针 )

指向未指定大小数组“(*p)[]”的指针在 C++ 中是非法的,但在 C 中是合法的

未指定暗淡时图像未填充画布[重复]

Oracle第二章——Oracle数据类型

创建具有未指定可变行长度的多维数组(Java)

未指定大小的 Android 裁剪图像