如何将子矩阵作为指针传递给另一个函数

How to pass submatrix to another function as a pointer

假设我有一个矩阵 A n*n 元素定义为指针 **A 的指针。我想将 A 的子矩阵 (B nb*nb) 作为指针传递给另一个函数,对子矩阵执行一些数学运算,然后 return 将其返回到原始函数。从函数 return 编辑的子矩阵也是矩阵 A 的成员,位置与之前相同。最好的发送方式是什么?

你不能只使用指针算法来做到这一点。你拥有的是一个数组数组。假设外部数组保存行,内部数组保存每行的元素(列),您可以将指针传递到外部数组的中间以跳过行,但不能跳过列。如果您也需要跳过列,您有两个选择:

  1. 传递原始矩阵以及偏移量和子矩阵大小。这意味着函数需要以能够处理子矩阵的方式进行编码。

  2. 创建一个新的外部数组来保存指向与所需列相对应的每个内部数组元素的指针。例如。 (假设elem是矩阵中每个元素的类型:

elem **get_submatrix(elem **mat, int n, int x, int y, int m)
{
   elem **submat = (elem **)calloc(m, sizeof(elem*));
   int i;
   for(i = 0; i < m; i++)
   {
       submat[i] = mat[y++] + x;
   }
   return submat;
}

当然你以后要free子矩阵(只有外层数组,没有内层数组)