静态数组的动态数组的问题

Problems with a Dynamic Array of Static Arrays

本文关键字:数组 问题 动态 静态      更新时间:2023-10-16

我不打算更改动态数组的大小。我想创建一个静态数组(包含 shorts)的动态数组的原因是我可以在函数中返回该数组(直到我使用该函数时才定义该数组的大小)。

那么我的第一个问题是,我如何返回这样的数组?函数不允许你返回没有类型的指针,我无法找到如何使用类型array定义指针。

这就引出了我的第二个问题,即如何正确定义静态数组的动态数组?我在网上搜索过这个,但没有一个答案太有帮助。

一种方法是声明: short (*array)[size]但问题是我不知道在这种情况下如何初始化数组,size必须是文字。

我可以这样做:

typedef short column[size];
column * row = NULL;
row = malloc(rowMax * sizeof(column));
row[0][0] = 10;

但同样,size必须是文字;即使size是文字,我也会收到一个错误,指出"void *"类型的值不能分配给"列*"类型的实体。

如果你们中的任何人有一个不使用向量的解决方案,我们将不胜感激;因为向量类大于数组类。

在 C++11 中,可以使用 <array> 中的 std::array 并执行以下操作:

constexpr std::size_t const cols = 42u; // static size
using MyStaticArray = std::array<short, cols>; // static array type
// Or in C++03 and earlier: typedef short MyStaticArray[42u];
std::size_t const rows = someValue; // dynamic size
MyStaticArray * dynamicArray = new MyStaticArray[rows];
// Or better: std::vector<MyStaticArray> dynamicArray(rows);
for (std::size_t row = 0u; row < rows; ++row)
  for (std::size_t col = 0u; col < cols; ++col)
    dynamicArray[row][col] = rows * cols;

PS:也给下面的雷米·勒博投票,因为他的评论有助于改进这篇文章。

为了节省时间,只需创建一个静态数组的向量

std::vector<std::array<Type, n>>

不知道为什么大小差异很重要,它只有几 Kb。

另外,如果你打算在C++应用程序中编写C代码......那么你的过得很糟糕。