【问题标题】:How to pass a sub-matrix as a parameter如何将子矩阵作为参数传递
【发布时间】:2020-08-22 21:05:04
【问题描述】:

假设我有一个执行特定任务的递归函数。该函数接收整数矩阵的单个参数。有没有办法在随后的函数调用期间将子矩阵作为参数传递,其方式类似于将指针推进到数组(让arr[10] 成为我们的数组。然后执行arr += 1 将提前开始数组前一索引。

此外,函数的签名不能更改。

例子:

void f(int matrix[N][N])
{
    // Some code here
    f(matrix+1);
}

【问题讨论】:

  • 您最好的选择可能是将当前矩阵的索引添加到 f() 中,例如void f(int matrix[N][N], int level)
  • @paulsm4 忘了说不能更改函数的签名。编辑了帖子。
  • C 数组是一个连续的元素序列。子数组通常不是(一维情况除外),因此这两种类型不兼容。如果您无法更改函数,则需要制作子矩阵的副本并将其作为参数传递。

标签: arrays c matrix multidimensional-array


【解决方案1】:

有没有办法在后续函数调用期间将子矩阵作为参数传递

不可以,但是你可以传递一个子矩阵的描述来取。例如,您可以传递指向外部矩阵的指针和描述子矩阵的偏移量及其大小的 4 个参数。

【讨论】:

    【解决方案2】:

    如果不允许更改函数签名,您可以维护一个全局变量来跟踪索引计数器:

    int cN = 0;
    void f(int m[N][N])
    {
        printf("%d\n", m[cN][0]);
        if(cN < N - 1)
        {
            cN++;
            f(m);
        }
    }
    

    【讨论】:

    • 呃。那是相当丑陋的黑客攻击......显然,OP 正在尝试做一些原始功能从未设计过的事情。 OP 有两个选择:1) 更改方法,或 2) 编写一个新方法,并尽可能/尽可能地调用新方法。
    猜你喜欢
    • 1970-01-01
    • 2019-04-08
    • 1970-01-01
    • 2021-11-20
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 2017-11-16
    相关资源
    最近更新 更多