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