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

时间:2019-09-07 17:50:58

标签: c pointers matrix parameter-passing submatrix

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

1 个答案:

答案 0 :(得分:1)

您不能仅使用指针算法来执行此操作。您拥有的是一个数组数组。假设外部数组包含行,内部数组包含每一行的元素(列),则可以将指针传递到外部数组的中间以跳过行,但不能跳过列。如果还需要跳过列,则有两个选择:

  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子矩阵(仅外部数组,而不是内部数组)