【发布时间】:2014-04-12 21:35:02
【问题描述】:
我身处 C++ 多维数组指针地狱之中。我有一个函数,它接受两个指向两个多维数组的指针。该函数将输入数组转换为输出数组。
void transpose(float * in, float * out) throw() {
size_t numvars = dataset.getVariables().size()
size_t numsegs = dataset.getSegments().size();
...
我在为输出数组动态分配缓冲区时遇到问题。我认为以下方法会起作用,因为数组会自动衰减为指针:
size_t numvars = dataset.getVariables().size()
size_t numsegs = dataset.getSegments().size();
float tData[numvars][numsegs];
transpose(data, tData);
但我得到了错误:
从 'float [(((sizetype)(((ssizetype)numvars) + -1)) + 1)][(((sizetype)(((ssizetype)numsegs) + -1 )) + 1)]' 到 'float*'
那么为什么会失败呢?为二维数组动态分配大小以便transpose 函数可以完成其工作的正确/最佳方法是什么?
【问题讨论】:
-
不要使用指针。使用正确的数据结构并通过 (const) 引用传递它们。
-
tData 不是浮点数* 是吗?因此出现错误消息。与您所说的相反,转置不采用指向两个多维数组的指针。
-
我认为这是因为数组衰减为指针。这仅适用于单维数组而不适用于多维数组吗?
-
一个 n 维数组衰减为指向 (n-1) 维数组的指针。它只会“忘记”它的第一个维度。
-
@Brian Bi - 对于具有固定维度的数组来说确实如此。
float tData[numvars][numsegs]是一个编译器扩展,我看不到tData会衰减到什么数据类型。int (*)[numsegs]不是类型。
标签: c++ arrays pointers types multidimensional-array