如何解决如何在递归函数中编写矩阵?
当我在函数内部声明矩阵时,示例:int recur(int mat [] [],int ....) 为什么编译器返回错误,但使用数组却可以正常工作?
解决方法
为了计算偏移量,编译器需要知道除第一个尺寸外的所有尺寸。认为二维数组具有行和列。 int mat[4][5]
有4行5列。
在这种情况下,这就是数组的概念。每个数字都是数组的索引,我们可以在其中找到相应的元素:
0 1 2 3 4
5 6 7 8 9
10 11 12 13 14
15 16 17 18 19
但是,它在内存中的实际布局方式是20个元素的 linear 序列:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
访问mat[2][3]
告诉编译器在此处定位元素13(第二行,第三列,从零开始)。它通过乘以2*5 + 3 == 10 + 3 == 13
来实现。请注意,为了执行此计算,必须知道列数。
如果您有假设变量int mat[][]
,并尝试索引mat[2][3]
,那么编译器如何执行此计算?它不知道数组有多少列。它只是无法计算元素的线性偏移,因为它没有足够的信息来做到这一点。
请注意,在上面的示例中未使用第一维(4)。编译器不需要知道此维,因为系数隐式为1。
这就是为什么必须知道除第一维以外的所有维的原因。第一维是唯一一个具有隐含系数的维。
一种解决方案是将函数设为模板:
template <int N>
int recur(int mat[][N]) {
// ...
}
在使用二维数组调用时,编译器将使用此模板实例化具有N
的适当值的函数版本,函数体在为数组建立索引时将用作乘法系数
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。