我不打算改变动态数组的大小。我想创建静态数组的动态数组(包含short)的原因是我可以在函数中返回该数组(直到我在该函数中才定义该数组的大小)。
我的第一个问题是,如何返回这样的数组?函数不允许您返回没有类型&我无法找到如何定义类型为array
的指针。
这让我想到第二个问题,即如何正确定义动态静态数组?我在网上搜索过这个,但没有一个答案太有用了。
一种方法是声明:short (*array)[size]
但问题是我不知道在这种情况下如何初始化数组,size
必须是文字。
我可以这样做:
typedef short column[size];
column * row = NULL;
row = malloc(rowMax * sizeof(column));
row[0][0] = 10;
但同样,size
必须是文字;即使size
是文字,我收到一个错误,指出“void *”类型的值不能分配给“column *”类型的实体。
如果你们中的任何人有一个不使用矢量的解决方案,那将非常感激;因为向量类大于数组类。
答案 0 :(得分:2)
在C ++ 11中,可以使用std::array
中的<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:同时放弃Remy Lebeau的评价,因为他的评论有助于改进这篇文章。
答案 1 :(得分:1)
为了节省时间,只需创建一个静态数组向量
std::vector<std::array<Type, n>>
不确定为什么尺寸差异很重要,只有几Kb。
另外,如果你要在C ++应用程序中编写C代码......那你就是时候了。