我有一个大小为 n 的矩阵。举个例子:
我的递归函数对位于矩阵边界的元素进行处理。现在我想在内方矩阵上调用它(递归调用):
这是我的递归函数的原型:
void rotate(int** mat, size_t n);
我知道二维数组是数组中的数组。我知道*(mat+1) + 1)
将给出应该是我的新矩阵基地址的内存地址。这是我尝试过的:
rotate((int **)(*(mat+1) + 1), n-2)
但它不起作用,当我尝试使用它访问它时,我遇到了段错误[][]
.
您不能取消引用mat+1
并将其重新解释为指向整个矩阵的指针。相反,提供偏移量作为函数的参数(我假设n
-by-n
方阵):
void rotate(int** mat, size_t i, size_t j, size_t n) {
// assuming row-wise storage
int *row0 = mat[j]; // assumes j < n
int *row1 = mat[j + 1]; // assumes j + 1 < n
// access row0[i..] and row1[i..]
}
如果您的矩阵有连续存储,您可以执行以下操作:
rotate(int* mat, size_t i, size_t j, size_t n) {
int atIJ = mat[j * n + i]; // assuming row-wise storage
// ...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)