如何从C 中的函数返回数组

How to return arrays from a function in C++?

本文关键字:函数 返回 数组      更新时间:2023-10-16

我有两个功能,如下所示:

1。

void calcoeff (double gamma, double delx, double A, double B, int n)
{
    int i;
    double halfdelx, sp = 0;
    double diag[n], upp[n-1], low[n-1], righ[n], X[n], sc[n];
    halfdelx = delx / 2;
    for (i = 1; i <= n; i++)
    {
        X[i] = i - 0.5;
        sc[i] = 8 * X[i];
        if (i == 1 || i == n)
        {
            diag[i] = ((gamma/delx) + (gamma/halfdelx) + sp);
        }
        else
            diag[i] = ((gamma/delx) + (gamma/delx) + sp);
        cout << "ndiag" << i << "=" << diag[i] << "n";
    }
    for (i = 1; i <= n-1; i++)
    {
        upp[i] = -1 * (gamma/delx);
        low[i] = -1 * (gamma/delx);
        cout << "nupp" << i << "=" << upp[i] << setw(15) << "low" << i << "=" << low[i] << "n";
    }
    for (i = 1; i <= n; i++)
    {
        if (i == 1){righ[i] = ((1/halfdelx) * A + sc[i]);}
        else if (i == n)
        {
            righ[i] = ((1/halfdelx) * B + sc[i]);
        }
        else
            righ[i] = sc[i];
        cout << "nrigh" << i << "=" << righ[i] << "n";
    }
    return;
}

2。

void TDMA (double diag[], double upp[], double low[], double righ[], int n)
{
    int i;
    double fact, phi[n];
    for (i = 2; i <= n; i++)
    {
        fact = low[i-1] / diag[i-1];
        diag[i] = diag[i] - fact * upp[i-1];
        righ[i] = righ[i] - fact * righ[i-1];
    }
    phi[n] = righ[n] / diag[n];
    for (i = n-1; i >= 1; i--)
    {
        phi[i] = (righ[i] - (upp[i] * phi[i+1])) / diag[i];
    }
    cout << "nThe solution is as follows:n";
    for (i = 1; i <= n; i++)
    {
        cout << "nphi" << i << " = " << phi[i] << endl;
    }
    return;
}

第一个功能计算并给出四个数组,必须将其作为输入参数发送到第二个函数才能获得最终的PHI数组。因此,在主要函数中,我声明了这两个函数所需的所有变量,我以相同的顺序将这两个函数称为这两个函数。我注意到的问题是,第一个功能是给出了四个具有正确值的数组,但是第二个功能没有给出正确的结果(根据代码)。我还注意到,第一个函数给出的数组不会作为输入参数进入第二个函数。第二个功能计算全部基于第一个功能给出的数组。谁能帮助我如何将第一个功能的输出发送到第二个功能?预先感谢。

不可能从c 中的函数中返回数组值(谈到数组类型;不要与 std::array混淆)。

但是,可以返回类实例,并且类实例可以包含数组。有一个类模板将数组包装到标准库中的类中:std::array。请注意,成员数组的大小必须是一个编译时间常数(就像所有数组变量一样),因此,如果数组需要具有运行时间大小,则此方法无效。

除了仅限于恒定尺寸外,复制周围的数据结构可能还很慢。一种常见的方法是让函数的呼叫者创建数据结构,并将输出迭代器传递到结构的元素 - 可能是元素的数量或第二个迭代器来表示范围。在数组的情况下,经常使用指针。该功能可以使用提供的迭代器来修改数据结构。一个例子:

const int n = 42;
void fill_arr(double*);
void use_arr(const double*);
int main() {
    double arr[n];   // an array is created in main
    fill_array(arr); // this function modifies the array
    use_arr(arr);    // the array can be passed to other functions
}

由于可能有很多参数,因此可能通过多个迭代范围传递到一个函数。