【发布时间】:2019-09-07 17:50:58
【问题描述】:
考虑我有一个矩阵A n*n 元素定义为指针**A 的指针。我想将 A 的子矩阵 (B nb*nb) 作为指针传递给另一个函数,对子矩阵执行一些数学运算并将其返回给原始函数。从函数返回的子矩阵也是矩阵 A 的成员,位于与之前相同的位置。最好的发送方式是什么?
【问题讨论】:
标签: c pointers matrix parameter-passing submatrix
考虑我有一个矩阵A n*n 元素定义为指针**A 的指针。我想将 A 的子矩阵 (B nb*nb) 作为指针传递给另一个函数,对子矩阵执行一些数学运算并将其返回给原始函数。从函数返回的子矩阵也是矩阵 A 的成员,位于与之前相同的位置。最好的发送方式是什么?
【问题讨论】:
标签: c pointers matrix parameter-passing submatrix
你不能只使用指针算术来做到这一点。你所拥有的是一个数组数组。假设外部数组包含行,内部数组包含每行的元素(列),您可以将指针传递到外部数组的中间以跳过行,但不能跳过列。如果您还需要跳过列,则有两种选择:
传递原始矩阵以及偏移量和子矩阵大小。这意味着函数需要以能够处理子矩阵的方式进行编码。
创建一个新的外部数组来保存指向每个内部数组中与所需列相对应的元素的指针。例如。 (假设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子矩阵(只有外部数组,而不是内部数组)
【讨论】: