将堆栈上的动态多维数组传递给函数C ++

时间:2019-03-06 17:06:53

标签: c++ function multidimensional-array stack

我刚刚去过当地的大学考试,他们要求我做一个探路者。我被卡住了,因为我真的很想将二维数组传递给函数。我还没有想出带有堆分配的双指针的想法,但是现在我想到了,不能像这样传递它真的很丑。 int function(int matrix[][]);int function(int& matrix[][]);之类的东西。该限制背后的逻辑是什么?没有malloc,有什么方法可以在堆栈上做到这一点吗?
EDIT
数组是动态的,我被禁止使用任何包装,包括标准库中的包装

1 个答案:

答案 0 :(得分:-1)

  

将二维数组传递给函数

首先要意识到的是,函数参数不能是数组。将数组传递给函数的典型方法是将指针传递给数组的元素。

对于2D数组,该数组的元素为1D数组。这是一个示例:

int function(int matrix[][4]);

int main() {
    int m[4][4];
    function(m);
}
  

没有malloc吗?

几乎没有理由在C ++中使用malloc

  

第二维不是const

那么它不能是多维数组。数组元素的类型必须是编译时间常数。由于大小是数组类型的一部分,因此这意味着多维数组的内部维必须是编译时间常数。 (此外,除非动态分配数组,否则最外面的维也必须是编译时常数)。

实现数学上多维结构的技巧是将它们表示为一维数组,其中内部维的每一行都在前一行之后(这也是多维数组类型的实现方式;内存是一维的) 。如果行的宽度相同,则可以使用以下公式将多维索引转换为扁平索引:

flat_index = dim1_index + dim2_index * row_size